j'ai un gros problème de performance sur ma bdd. Après analyse du problème, la requête qui plombe les perfs est la suivante :
Il y a deux index sur la table_b qui contient 27 000 000 lignes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT count(table_a.profil) FROM table_a, table_b WHERE table_a.so0_type = :b1 AND table_a.code = table_b.code AND table_b.etat = 'Actif' AND table_a.type = 'Client' AND table_b.id = :b2;
- un index non unique sur la colonne id : 18 000 000 clés pour l'index
- un index non unique sur la colonne code : 540 000 clés pour clés
Il n'y a aucun index sur la table_a qui contient 50 lignes
Le plan d'exécution indique que c'est l'index sur la colonne code qui est utilisé. Pourtant, il est beaucoup moins discriminant. Avec l'index code, la vitesse de traitement est de 40 lignes/minutes. Avec l'index id, la vitesse passe à 1500 lignes/minutes.
Comment se fait-il qu'oracle utilise en priorité cet index ?
Y'a-t-il un moyen de forcer l'utilisation de l'index sur l'id, sans modifier la requête, ie sans mettre un hint ?
Merci d'avance
Partager