0

通过查询计划优化 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
4

1 回答 1

2

作为布尔值(即使定义为 int,您声明它们只有两个值)我怀疑 ReviewCompleteFlag 或 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
于 2013-03-12T18:03:13.547 回答