按查询计划优化Sqlserver 2005查询
我有一个以下查询,如果有更多可用的项目需要1.7秒来拉72条记录可能需要更多时间。
当我运行查询计划时,我发现昂贵的操作是“ReviewCompleteFlag = 0 AND ReviewItemDeleteFlag = 0 AND ActivationDateTime”b / c非他们有索引
ReviewCompleteFlag value can be 0 or 1
ReviewItemDeleteFlag values can be 0 or 1
itemid is foreign key
有没有办法可以优化此查询?
SELECT
TOP 200000
ItemId
FROM
ItemReview (nolock)
WHERE ReviewCompleteFlag =0 AND ReviewItemDeleteFlag = 0 AND ActivationDateTime is null
ORDER BY ReviewPriority DESC
答案 0 :(得分:2)
作为布尔值(即使定义为int,你声明它们只有两个值)我会怀疑IndexCompleteFlag或ReviewItemDeleteFlag都不会被索引帮助。索引通常需要更多的数据可变性才有用。
我会考虑在ActivationDateTime和ReviewPriority上尝试索引。
一旦你在ActivationDateTime上有索引,派生表可能会更快(至少那时你将未索引的布尔值应用到一个较小的集合,这可能对你有利(当然先尝试并测量)使用您的数据库设置和数据库):
SELECT
TOP 200000
ItemId
FROM
(SELECT ItemID, ReviewCompleteFlag, ReviewItemDeleteFlag, ReviewPriority
FROM ItemReview
WHERE ActivationDateTime is null) IR WITH (nolock)
WHERE ReviewCompleteFlag =0 AND ReviewItemDeleteFlag = 0 ORDER BY ReviewPriority DESC