SQL Server 2008 で実行しているクエリでパフォーマンスの問題が発生しています。次のクエリがあります。
クエリ 1:
SELECT GroupID, COUNT(*) AS TotalRows FROM Table1
INNER JOIN (
SELECT Column1 FROM Table2 WHERE GroupID = @GroupID
) AS Table2
ON Table2.Column1 = Table1.Column1
WHERE CONTAINS(Table1.*, @Word) GROUP BY GroupID
Table1 には約 500,000 行が含まれています。Table2 には約 50,000 が含まれていますが、最終的には数百万になります。クエリをいじってみると、次のようにクエリを書き直すと、クエリの実行時間が 1 秒未満に短縮されることがわかりました。
クエリ 2:
SELECT GroupID FROM Table1
INNER JOIN (
SELECT Column1 FROM Table2 WHERE GroupID = @GroupID
) AS Table2 ON Table2.Column1 = Table1.Column1
WHERE CONTAINS(Table1.*, @Word)
私が理解していないのは、それが単純なカウント クエリであることです。表 1 に対して次のクエリを実行すると、1 秒未満で返されます。
クエリ 3:
SELECT Count(*) FROM Table1
このクエリは、結果として約 500,000 を返します。
ただし、上記の元のクエリ (クエリ 1) は 50,000 のカウントしか返さず、GROUP BY (クエリ 2) を削除するだけで実行時間が 1 秒未満に短縮されますが、実行に 3 秒かかります。
適切な列に既にインデックスがあるため、これはインデックス作成の問題ではないと思います。どんな助けでも大歓迎です。