3
我有一個相對簡單的查詢:爲什麼我的查詢計劃會生成索引掃描?
SELECT o.id
FROM dbo.table1 o
LEFT JOIN dbo.table2 n (NOLOCK)
ON o.first = n.second and n.first = @Var1
WHERE
(o.fourth in (@Var4, @Var5) or o.fifth = @Var6) AND
(o.first = @Var1 or n.first = @Var1) AND
(
o.second = @Var2 OR
o.second like (@Var2 + '[^a-zA-Z]%') OR
o.third like (@Var3 + '[^a-zA-Z]%')
)
但每當我檢查了查詢計劃,我做一個索引掃描。
非聚集索引我是(上表1):
First ASC,
Fourth ASC,
Fifth ASC,
Second ASC,
Third ASC
Include: id
爲什麼掃描?我的索引不覆蓋它嗎?我也有table2的正確索引,所以我並不擔心。
感謝所有幫助
有道理。在那種情況下,我並沒有真正具體的出發點。重寫查詢會是更好的選擇嗎? – user2124871
@ user2124871 - 很難說什麼時候一切都如此抽象。如果查詢是*邏輯上正確的*,那麼任何在邏輯上正確的重寫也可能具有完全相同的查詢計劃。 –
所以我試圖解決這個問題,但是,就像你說的,我得到了相同的查詢計劃。下一個解決方案是將其分解爲單獨的查詢並加入結果。感謝您的輸入 - 非常感謝。 – user2124871