我有以下的sql。當我檢查這個查詢的執行計劃時,我們會觀察索引掃描。我如何用索引查找來替換它。我在IdDeleted列上有非聚集索引。 性能調整SQL
SELECT Cast(Format(Sum(COALESCE(InstalledSubtotal, 0)), 'F') AS MONEY) AS TotalSoldNet,
BP.BoundProjectId AS ProjectId
FROM BoundProducts BP
WHERE BP.IsDeleted=0 or BP.IsDeleted is null
GROUP BY BP.BoundProjectId
我試過這樣並得到索引查找,但結果是錯誤的。
SELECT Cast(Format(Sum(COALESCE(InstalledSubtotal, 0)), 'F') AS MONEY) AS TotalSoldNet,
BP.BoundProjectId AS ProjectId
FROM BoundProducts BP
WHERE BP.IsDeleted=0
GROUP BY BP.BoundProjectId
任何人都可以好心地建議我使用索引查找來獲得正確的結果集。
我的意思是如何替換(BP.IsDeleted = 0或BP.IsDeleted爲null)條件以利用索引查找。
編輯,添加的行數從其中一個答案的評論:
null: 254962 rows
0: 392002 rows
1: 50211 rows
我的索引定義有兩列(BoundProjectId,IsDeleted)。我想將其更改爲索引搜索而不是索引掃描。 – StackUser
一種可能性是做兩個查詢,每個條件一個,和'UNION'他們在一起 – HoneyBadger
@HoneyBadger可能不是最好的選擇,因爲你會掃描表兩次。 –