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?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <SPAMveritejerome@wanadoo.fr> wrote in message
news:eYxgtl7lDHA.2364@TK2MSFTNGP11.phx.gbl...
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?
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?