Salut, j'ai une requête à améliorer.
Admettons une requête du genre et que j'ai un index sur le champ status.
Dans ce cas mon index n'est pas utilisé et le "explain plan" m'indique un full table scan.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM TABLE1 WHERE STATUS IN (1, 2) ORDER BY ID
Si je fais seulement un
mon index est utilisé et le résultat s'affiche beaucoup plus vite que si je n'avais pas d'index du tout sur le champ status.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM TABLE1 WHERE STATUS IN (2) ORDER BY ID
Même principe avec STATUS = 1 vs STATUS = 1 OR STATUS = 2.
J'ai besoin d'avoir de quoi de performant pour répondre à une table d'un millions d'enregistrements avec un IN (1, 2, ...)
J'ai essayé de forcer l'index avec
ça change rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select /*+ INDEX(a ix_test) */ from table1 a where status in (1,2)...
La seule chose que j'ai trouvé qui est vraiment mais alors là vraiment performant, c'est de créer ma table en faisant des partitions basées sur la colonne statut.
Si je fais ça et je fais un in (1, 2, 4) là les partitions et les index font que ça reviens vraiment vite. Par contre pour utilisé le partitionning il faut une license qui vaut assez cher...
Donc, je me demandais si quelqu'un aurait une idée pour m'aider (sans partionning).
Merci !
Partager