2009-06-30 9 views
1

SQL Server 2008のフルテキスト検索(FTS)は、このシナリオでは、非常に遅いです:SQL Server 2008のフルテキスト検索(FTS)極端に遅く、複数のCONTAINSTABLEは

クエリ1:

SELECT [...] FROM ContentItem CI WHERE 
(**EXISTS** (SELECT TOP 1 * FROM **CONTAINSTABLE**([**Table1**], *, '"[search_string]*"') FT 
WHERE FT.[Key] = CI.ContentItem_Id)) 
ORDER BY [...] 

結果: SQL 2005およびSQLの超高速2008

クエリ2:

SELECT [...] FROM ContentItem CI WHERE 
(**EXISTS** (SELECT TOP 1 * FROM **CONTAINSTABLE**([**Table2**], *, '"[search_string]*"') FT 
WHERE FT.[Key] = CI.ContentItem_Id)) 
ORDER BY [...] 

結果: SQL 2005の超高速とSQL 2008

クエリ3:

SELECT [...] FROM ContentItem CI WHERE 
(**EXISTS** (SELECT TOP 1 * FROM **CONTAINSTABLE**([**Table1**], *, '"[search_string]*"') FT 
WHERE FT.[Key] = CI.ContentItem_Id) 
**OR EXISTS** (SELECT TOP 1 * FROM **CONTAINSTABLE**([**Table2**], *, '"[search_string]*"') FT 
WHERE FT.[Key] = CI.ContentItem_Id)) 
ORDER BY [...] 

結果:SQL 2005超高速(第2程度)、SQL 2008では極端に遅い(3分以上)

私はSQL 2008 FTSのパフォーマンス問題(stackoverflow上でさえ)を認識していますが、合理的な解決策はまだ見つかりません。

答えて

2

あなたは

SELECT ... WHERE EXISTS ... CONTAINSTABLE(Table1...) 
UNION 
SELECT ... WHERE EXISTS ... CONTAINSTABLE(Table2...) 
ORDER BY ... 

にクエリ3を書き換えることはできますか?

UNION ALLはUNIONよりも高速ですが、重複したレコードが発生する可能性があります。

1

あなたはおそらく悪い計画を取得します。プランを投稿できる場合は、問題の診断に役立ちます。悪い結合が選択された場合、問合せヒントを使用して問題を解決できます。

0

SQL 2008にアップグレードしてこの問題が発生しました。私はこれをクエリの一番下に置くと、それが私のためにうまくいったことが分かりました:オプション(MAXDOP 1)

関連する問題