Bonjour,
Je voudrai me cultiver un peu
Mettons une requête de ce genre :
La table est un journal qui contient l'historique des statuts de chaque événement. Quand un événement a eu plusieurs fois le même statut, on ne veut garder que le plus récent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT * FROM LOG_BOOK t1 WHERE DATE_TIME = (SELECT MAX(DATE_TIME) FROM LOG_BOOK t2 WHERE t1.EVENT_ID = t2.EVENT_ID AND s1.STATUS = s2.STATUS);
J'aimerai comprendre comment Oracle traite les sous-requêtes car j'ai l'impression que ce genre de chose peut vite devenir un gouffre à performances. De manière générale, comment sont traitées les sous-requêtes ? Une exécution pour chaque ligne de la requête principale en filtrant sur l'EVENT_ID ? Une seule exécution puis un JOIN sur EVENT_ID ? Les deux sont possibles selon ce que l'optimiseur pense le plus performant ?
Il n'y a pas des problèmes de cardinalité qui peuvent induire l'optimiseur en erreur sur ce genre de requête ?
Selon le fonctionnement d'Oracle, quelles sont les pistes d'optimisation de ce genre de requête ?
Merci par avance
Partager