我有以下的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可能不是最好的选择,因为你会扫描表两次。 –