J'ai les trois tables suivantes (il y a en fait beaucoup plus de champs, mais cela devrait donner une idée de ce que j'essaie de faire) :
log (
eventId INTEGER,
objectId INTEGER,
PRIMARY KEY (eventId)
)
objects (
objectId INTEGER,
typeId INTEGER,
PRIMARY KEY (objectId, typeId)
)
statusBits (
typeId INTEGER,
bitNumber INTEGER,
)
Les log
contient un très grand nombre d'enregistrements (plus de 500 000), alors que les autres tables sont assez petites. Je peux joindre les tables à l'aide de 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 s'exécute rapidement. Elle fonctionne également rapidement lorsque j'ajoute un ORDER BY eventId
à la fin. Cependant, lorsque j'ajoute ORDER BY eventId, bitNumber
(triant ainsi sur deux champs au lieu d'un), il devient douloureusement lent.
Comment puis-je optimiser ma requête pour qu'elle s'exécute plus rapidement ? J'utilise Oracle 10g XE si cela fait une différence.
UPDATE : J'ai déjà essayé CREATE INDEX ON statusBits(bitNumber)
mais cela ne semble pas avoir beaucoup d'effet.