0

クエリプランによってSQLServer2005クエリを最適化する

次のクエリがあります。72レコードをプルするのに1.7秒かかりますが、より多くのアイテムが利用できる場合はさらに時間がかかる可能性があります。

クエリプランを実行すると、コストのかかる操作が「ReviewCompleteFlag = 0 AND ReviewItemDeleteFlag = 0ANDActivationDateTime」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 として定義されていても、2 つの値しかないと述べています)、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 に答える