由于where子句中的IS NULL
检查,我的查询非常慢。至少,这就是它的样子。查询需要一分钟才能完成。
简化查询:
SELECT DISTINCT TOP 100 R.TermID2, NP.Title, NP.JID
FROM Titles NP
INNER JOIN Term P
ON NP.TermID = P.ID
INNER JOIN Relation R
ON P.ID = R.TermID2
WHERE R.TermID1 IS NULL -- the culprit?
AND NP.JID = 3
我在所有提到的字段上都有非唯一的,非群集的和唯一的聚集索引,以及涵盖R.TermID1
且具有过滤器TermID1 IS NULL
的额外索引。
Term有2835302条记录。 Relation有25446678条记录,其中10%有TermID1 = NULL。
XML格式的SQL计划位于:http://pastebin.com/raw.php?i=xcDs0VD0
答案 0 :(得分:0)
所以,我正在弄乱最大的表的索引,添加过滤的索引,覆盖列,围绕子句的变换等。
有一次,我只是删除了索引,并创建了一个具有旧配置的新索引,并且它有效!
答案 1 :(得分:-1)
您可以删除WHERE子句并将条件放入JOIN子句中。
SELECT DISTINCT TOP 100 R.TermID2, NP.Title, NP.JID
FROM Titles NP
INNER JOIN Term P
ON NP.TermID = P.ID AND NP.JID = 3
INNER JOIN Relation R
ON P.ID = R.TermID2 AND R.TermID1 IS NULL