je les trois tableaux ci-dessous (il y a effectivement beaucoup plus de champs, mais cela devrait donner une idée de ce que je suis en train de réaliser):Accélérez Oracle requête multi-table avec clause ORDER BY
log (
eventId INTEGER,
objectId INTEGER,
PRIMARY KEY (eventId)
)
objects (
objectId INTEGER,
typeId INTEGER,
PRIMARY KEY (objectId, typeId)
)
statusBits (
typeId INTEGER,
bitNumber INTEGER,
)
La table log
contient un très grand nombre d'enregistrements (500 000+), tandis que les autres tables sont assez petites. Je peux joindre les tables en utilisant la requête suivante:
SELECT l.eventId, o.typeId, s.bitNumber
FROM log l, objects o, statusBits s
WHERE (l.objectId = o.objectId) AND (o.typeId = s.typeId)
Cette requête fonctionne bien et rapidement. Il fonctionne également rapidement lorsque j'ajoute une clause ORDER BY eventId
à la fin. Cependant, quand j'ajoute ORDER BY eventId, bitNumber
(triant ainsi par deux champs au lieu d'un), il devient douloureusement lent.
Comment puis-je optimiser ma requête pour qu'elle s'exécute plus vite? Je cours Oracle 10g XE si cela fait une différence.
MISE À JOUR: Je l'ai déjà essayé CREATE INDEX ON statusBits(bitNumber)
mais il ne semble pas avoir un grand effet.
Pouvez-vous ajouter le plan d'explication pour les deux requêtes? –