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:
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)')
Dans ce cas ça marche, mais le requête devient beaucoup moins performante.
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!