Bonjour,
J'ai une requête que je voudrais optimiser. Celle ci fait le lien entre plusieurs tables (contenant des centaines de milliers d'enregistrements) et effectue des comparaisons sur plusieurs champs.
Pour résumer mon problème, je vais prendre un exemple simplifié.
Disons que j'ai une table TB_ADRESSES (id_adresse, rue, numeroMaison, codePostal) contenant des adresses indexée sur tous les champs.
Je veux voir quelles adresses sont équivalentes, c'est à dire même 'rue', même 'numeroMaison' et même 'codePostal'.
Pour cela je pourrais faire quelque chose du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT TB1.id_adresse, TB2.id_adresse FROM TB_ADRESSES AS TB1, TB_ADRESSES AS TB2 WHERE TB1.rue = TB2.rue AND TB1.numeroMaison = TB2.numeroMaison AND TB1.codePostal = TB2.codePostal
Mon problème est que certains champs peuvent être nuls. Et dans ce cas ci la requête ne fonctionne pas correctement..!
Pour y remédier, j'utilise la fonction IsNull.
Il me faut alors mettre le code:
Dans ce cas ça marche, mais le requête devient beaucoup moins performante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT TB1.id_adresse, TB2.id_adresse FROM TB_ADRESSES AS TB1, TB_ADRESSES AS TB2 WHERE IsNull(TB1.rue,'(null)') = IsNull(TB2.rue,'(null)') AND IsNull(TB1.numeroMaison,'(null)') = IsNull(TB2.numeroMaison,'(null)') AND IsNull(TB1.codePostal,'(null)') = IsNull(TB2.codePostal,'(null)')
Si je ne trompe pas, ceci peut être en partie expliqué par le fait que les indexes sur les champs rue, numéroMaison et codePostal ne sont plus utilisés (?).
=> Comment est ce que je peux modifier cette requête pour optimiser sa performance?
Merci par avance pour vos conseils!
Partager