Bonjour,

Je voudrai me cultiver un peu

Mettons une requête de ce genre :
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);
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.

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