0

いくつかの列の 2 つのテーブルでいくつかの更新を行う必要があります。テーブルはどちらも約 100 万行です。3 つの異なるサーバーで変更を行う必要があります。更新は簡単です。部分文字列を削除するだけです。部分文字列の長さは約 200 文字で、列はVARCHAR(MAX). この変更は、行の約 3 分の 1 に影響します。これはクエリです:

DECLARE @myVar varchar(250) = 'blablabla2345f25wdf34gqefblablabla...blablablabla'
UPDATE myTable
    SET myCol = REPLACE(myCol, @myVar, '')
WHERE myCol LIKE '%' + @myVar + '%'

問題は、私が 1 つのテーブルから始めて実行に時間がかかりすぎて、10 分後に実行を停止したことです。最初のサーバーは単なるテスト/サンドボックス サーバーですが、他のサーバーは運用前および運用です。クエリを高速化する方法に関する推奨事項はありますか?

4

2 に答える 2

3

遅い理由は、WHERE ステートメントがインデックスにヒットしていないためです。文字列がワイルドカードで始まる場合、like はインデックスを使用できません。サーバーによっては、検索語が「someterm%」の場合、インデックスを使用できる場合があります。

検索するためのインデックスがあるようにクエリを修正する方法はありますか?

于 2013-11-14T15:54:23.460 に答える