Bonjour, mon titre n'est pas très explicite j'avoue.
J'ai en fait un problème de compréhension quant à l'utilisation ou non d'un index par oracle.
Voici ma requête:Ici oracle fait un full scan, à cause du lower() et du like '%cora%'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select * from ANNONCE this_ inner join LIGNE_COMMANDE lc1_ on this_.NUM_ANN=lc1_.NUM_ANN where lower(lc1_.NOM) like '%cora%' order by this_.NUM_ANN desc
Avec cette requête:Oracle utilise les index, là aussi je comprends pourquoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select * from ANNONCE this_ inner join LIGNE_COMMANDE lc1_ on this_.NUM_ANN=lc1_.NUM_ANN where lc1_.NOM like 'cora%' order by this_.NUM_ANN desc
Maintenant cette requête:Oracle utilise les index..et j'avoue ne pas savoir pourquoi, logiquement à cause du lower() et du '%cora%' il devrait toujours utiliser un full scan.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 select * from ( select * from ANNONCE this_ inner join LIGNE_COMMANDE lc1_ on this_.NUM_ANN=lc1_.NUM_ANN where lower(lc1_.NOM) like '%cora%' order by this_.NUM_ANN desc ) where rownum <= 20
Ça risque de vous paraître trivial dans ce cas merci d'éclairer ma lanterne![]()
Partager