Maison > base de données > tutoriel mysql > Comment sélectionner efficacement les 10 principaux enregistrements Oracle avec des conditions et un ordre spécifiques ?

Comment sélectionner efficacement les 10 principaux enregistrements Oracle avec des conditions et un ordre spécifiques ?

Barbara Streisand
Libérer: 2025-01-18 15:47:12
original
535 Les gens l'ont consulté

How to Efficiently Select the Top 10 Oracle Records with Specific Conditions and Ordering?

Optimisation des requêtes Oracle : sélection des 10 principaux enregistrements avec conditions

Les requêtes de base de données Oracle nécessitent souvent de récupérer un nombre limité d'enregistrements en fonction de critères spécifiques et d'un ordre souhaité. Utiliser simplement LIMIT avec des conditions supplémentaires peut parfois donner des résultats inattendus, surtout lorsqu'il s'agit d'une commande. Cet article aborde un scénario courant et propose des solutions optimisées.

Le défi réside dans la sélection des 10 meilleurs enregistrements du tableau HISTORY, classés par STORAGE_GB, tout en excluant les enregistrements avec APP_IDs spécifique. Une approche naïve utilisant LIMIT directement pourrait fausser les résultats.

La solution : des sous-requêtes pour une commande précise

Pour garantir un classement correct avant de limiter les résultats, nous utilisons une sous-requête. Cette approche donne la priorité au filtrage et au tri, puis applique la limite. La requête affinée est la suivante :

<code class="language-sql">SELECT * FROM (
  SELECT DISTINCT
    APP_ID,
    NAME,
    STORAGE_GB,
    HISTORY_CREATED,
    TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE
  FROM HISTORY
  WHERE
    STORAGE_GB IS NOT NULL AND
    APP_ID NOT IN (
      SELECT APP_ID
      FROM HISTORY
      WHERE TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') = '06.02.2009'
    )
  ORDER BY STORAGE_GB DESC
)
WHERE ROWNUM <= 10;</code>
Copier après la connexion

Techniques de performances améliorées

Pour améliorer l'efficacité des requêtes, envisagez ces alternatives :

  • NOT EXISTS pour un filtrage optimisé : Remplacez NOT IN par NOT EXISTS pour éviter d'éventuels problèmes de produit cartésien, conduisant à une exécution plus rapide.

  • RANK() Fonction de sélection classée : La fonction RANK() attribue un classement à chaque enregistrement en fonction de l'ordre STORAGE_GB. La sélection des enregistrements dont le classement est inférieur ou égal à 10 constitue une méthode plus efficace pour récupérer le top 10.

En utilisant ces approches optimisées, vous pouvez récupérer efficacement les 10 principaux enregistrements dans Oracle tout en conservant le bon ordre et en évitant les goulots d'étranglement en termes de performances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal