1

次のクエリは、SQL Server 2008R2 の ItemData テーブルを対象とする sproc で実行されます。

SELECT TOP(500) ItemListID, GeoCity, GeoState, GeoDisplay, Title, Link, Description, CleanDescription, OptimizedDescription, PubDateParsed, ImageBytes, DateAdded  FROM  (      SELECT TOP(500) ItemListID, GeoCity, GeoState, GeoDisplay, Title, Link, Description, CleanDescription, OptimizedDescription, PubDateParsed, ImageBytes, DateAdded, ROW_NUMBER()             
       OVER( ORDER BY ItemListID DESC )
       AS RowNumber  
       FROM ItemData  
       WHERE CONTAINS(Title, @FTSSearchTerm  ) -- ' + @OriginalSearchTerm + '"')   
       AND  ( WebsiteID=1 AND 
                                     (@GeoCity = '-1' OR GeoCity = @GeoCity)  AND
                                     (@GeoState = '-1' OR GeoState = @GeoState) )
                   ) ItemData   WHERE RowNumber >= ( @PageNum - 1) * @PageSize + 1   AND RowNumber <= @PageNum * @PageSize ORDER BY ItemListID DESC 

        SELECT @NumberOfResultsReturned = @@ROWCOUNT         

        SELECT @ActualNumberOfResults = COUNT(*) FROM ItemData WHERE CONTAINS(Title, @FTSSearchTerm  ) -- ' + @OriginalSearchTerm + '"')    AND  ( WebsiteID=1 AND       (@GeoCity = '-1' OR GeoCity = @GeoCity)  AND    (@GeoState = '-1' OR GeoState = @GeoState) )

データに応じて、クエリで または のいずれCONTAINSかが使用されますFREETEXT

負荷がかかると、このクエリの実行は非常に遅くなり、サーバーは 100% でピークになります。

次のインデックスを設定しました。

ここに画像の説明を入力

これらのクエリが非常にホットに実行されないようにするには、どうすればよいですか?

ありがとう。

- アップデート -

このテーブルには、ItemListID と、タイトルと説明の FTS のみで構成される 1 つのクラスター化インデックスがあります。

次のように、非クラスター化インデックス (ID 名に誤って名前が付けられています) を追加しました。

非クラスター化インデックス

4

1 に答える 1

0

実行計画を実際に調べなくても、Title、GeoCity、GeoState、および WebsiteID に、ItemListID、GeoDisplay、Link、Description、CleanDescription、OptimizedDescription、PubDateParsed、ImageBytes、DateAdded の列を含む非クラスター化インデックスが必要なようです。

これにより、実行プランは、このクエリで探しているすべての情報を含む 1 つの非クラスター化インデックスを使用できるようになります。それがなければ、あなたが示したインデックスの1つを使用し、必要なデータを取得するためにテーブルに移動する必要があります.

ただし、これで問題が完全に解決されるわけではありません。テーブル内のデータの量によっては、Contains on Title を実行して検索を行うと、常にコストがかかります。全文検索を活用して検索部分を実行できれば最高です。

うまくいけば、これが役に立ちます!

于 2012-08-09T01:25:15.093 に答える