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>
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!