2009-10-17 6 views
1

J'ai une liste de valeurs codées en dur comme: 1,5,7,8 et ainsi de suite.Filtrer les lignes par liste codée en dur dans la performance MySQL

Et je dois filtrer les lignes de table qui ont ID dans la liste ci-dessus, donc je faire quelque chose comme ceci:

Select 
* 
from myTable m 
    left join othertable t 
    on t.REF_ID = m.ID 
where m.ID not in (1,5,7,8...) 

Mais quand j'ai plus de valeurs (comme 1000) et plus de lignes (100) othertable et myTable cette requête commence à être lente. J'ai un index sur REF_ID et ID. Il semble que la partie « où m.ID dans (1,5,7,8) est le problème.

est-il plus rapide pour filtrer les lignes par liste hardcoded des valeurs?

Répondre

1

Essayez de mettre votre liste dans une table temporaire comme temptable.ID et faire

SELECT * 
FROM myTable m 
LEFT JOIN othertable t ON t.REF_ID = m.ID 
LEFT JOIN temptable ON m.ID = temptable.ID 
WHERE temptable.ID IS NULL 
Questions connexes