Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Optimiser une requete

1 réponse
Avatar
Jérôme VERITE
Bonjour,

J'effectue une requête SQL sur une base Access 97, ma requête est de la
forme
SELECT TAB1.LIB FROM TAB1 WHERE TAB1.LIB NOT IN (SELECT TAB1.LIB FROM TAB1,
TAB2 WHERE TAB1.LIB LIKE '*' + TAB2.LIB + '*')

Lorsque j'execute cette requête, il me faut attendre très longtemps avant
que quoi que ce soit ne se passe quand mes tables contiennent quelques
dizaines de milliers d'enregistrements, comment puis-je accélérer cela?

Merci d'avance

Jérôme

1 réponse

Avatar
Daniel Carollo
Bonjour Jerome!

La majeure cause de lenteur de votre requete est l'utuilisation de
l'operateur LIKE, en plus avec les jokers * ajoutes avant ET apres. Cela
empeche Jet d'utiliser les index sur la table TAB2 et le force a faire un
"scan" de la table toute entiere, probablement deux fois.

Ne pourriez-vous pas simplifier l'expression de votre requete, en quelque
chose du genre:
SELECT TAB1.LIB FROM TAB1 LEFT JOIN TAB2 ON (TAB1.LIB LIKE '*' + TAB2.LIB +
'*')
WHERE TAB2.LIB IS NULL

Le mieux serait de se debarasser de l'operateur LIKE. Si les * ont une
longeur reguliere, on pourrait remplacer les parenthese par (TAB1.LIB Mid(n, Len(TAB1.LIB), TAB2.LIB)) qui, je pense, serait beaucoup plus rapide.
Il faut toujours se mefier des operateurs comme LIKE ;-)

J'espere que ca vous donne des pistes.

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...

"Jérôme VERITE" wrote in message
news:
Bonjour,

J'effectue une requête SQL sur une base Access 97, ma requête est de la
forme
SELECT TAB1.LIB FROM TAB1 WHERE TAB1.LIB NOT IN (SELECT TAB1.LIB FROM
TAB1,

TAB2 WHERE TAB1.LIB LIKE '*' + TAB2.LIB + '*')

Lorsque j'execute cette requête, il me faut attendre très longtemps avant
que quoi que ce soit ne se passe quand mes tables contiennent quelques
dizaines de milliers d'enregistrements, comment puis-je accélérer cela?

Merci d'avance

Jérôme