SQL Server (2008 R2) の全文検索にパフォーマンスの問題があります。全文検索条件にwhere条件を追加すると、遅くなりすぎます。
これが私の単純化されたクエリです:
SELECT * FROM Calls C
WHERE (C.CallTime BETWEEN '2013-08-01 00:00:00' AND '2013-08-07 00:00:00')
AND CONTAINS(CustomerText, '("efendim")')
Calls テーブルの主キーは CallId (int、クラスター化インデックス) であり、CallTime によってインデックス付けされた Calls テーブルでもあります。16.000.000 行あり、CustomerText は各行で約 10KB です。
実行計画を見ると、まず全文検索の結果セットを見つけて、CallId で Calls テーブルに結合します。そのため、最初の結果セットの行が増えると、クエリが遅くなります (1 分以上)。
これは実行計画です:
where 条件を個別に実行すると、CallTime 条件に対して 360.000 行が返されます。
SELECT COUNT(*) FROM Calls C
WHERE (C.CallTime BETWEEN '2013-08-01 00:00:00' AND '2013-08-07 00:00:00')
および 1.200.000 行 (Contains 条件の場合):
SELECT COUNT(*) FROM Calls C
WHERE CONTAINS(AgentText, '("efendim")')
では、クエリの実行者を増やすにはどうすればよいでしょうか?