私は約100万レコードのテーブルを持っています(SQL Server 2008 Webを実行しています)。私は商品コードと商品説明にマッチする検索ルーチンを持っています。 しかし、状況によっては非常に遅いです。以下は(カットダウン)SQL文:このSQL文はなぜ非常に遅いのですか?
はWITH AllProducts AS (
SELECT p.*, Row_Number() OVER (ORDER BY ProductId) AS RowNumber
FROM Product AS p
WHERE p.IsEnabled=1 AND
(
p.BaseSku = 'KPK-3020QWC-C' -- this on its own is fast
OR
CONTAINS(p.FreeTextStrings, '"KPK-3020QWC*"') -- and this on its own is fast, but not both
)
) SELECT * FROM AllProducts
WHERE RowNumber BETWEEN 1 AND 20;
注私はちょうど[p.BaseSku = 'KPK-3020QWC-C']または[CONTAINS(p.FreeTextStrings、「「KPK-3020QWCに比較した場合には* "))]を個別に(ただし両方ではなく)瞬時に実行します。私はそれらを一緒に比較すると、時間がかかります(数分)。
IsEnabledとBaseSkuにはインデックスが付けられ、FreeTextStringsはFTSインデックスに登録されています。
私はこれがうまくいきました。
誰もがこれについてどのような光を放ち、いくつかの解決策を提案できますか?
実行計画ファイルはここにあります:http://wiki.webgear.co.nz/GetFile.aspx?File=Temp%5cSearch%20Test.sqlplan.zip
SQL Serverから実行計画を表示できますか? –
これらの問題は、SQL 2005をSQL 2008にアップグレードした後に発生し始めました。 – Muxa