1

タイプのテキストベースの列を持つテーブルがあり、nvarchar(450)その列の非クラスター化インデックスを作成しました。

CREATE NONCLUSTERED INDEX [myindexname] ON [myschema].[mytable] 
(
    [mycolumn] ASC
)

私の問題は、次のようなクエリを実行するときに発生します。

select 
    .... 
where
    .... 
    mycolumn like '%something%'

最初の % なしでクエリを実行すると、インデックスは非常に高速に動作しますが、最初の % を使用すると、かなりの時間がかかります。

インデックスの基本では、where 句に最初の % を使用しないことを推奨していることは知っていますが、クエリからそれを削除することはできません。インデックスを改善するオプションがあるかどうか疑問に思っていました (現在、クエリを変更することはできません)。

注: 説明計画は、インデックスへの正しいアクセスを示しています。

4

2 に答える 2

1

インデックスは、列mycolumnのアルファベット順に並べ替えられます。そのため、前にある部分文字列を探す場合%、クエリ エンジンはテーブル/インデックス全体をスキャンする必要があります。

この種のクエリを高速化する唯一の方法は、全文検索を使用することです。

于 2013-02-07T11:36:23.483 に答える