通过查看查询计划来优化查询

时间:2013-03-12 17:42:54

标签: sql-server query-optimization

按查询计划优化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

1 个答案:

答案 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