文字列が 900 バイトを超える場合、可変長か固定長かに関係なく、インデックス キーにすることはできません。
1 つのアイデアは、計算列を追加して、少なくともシークをより選択的にすることです。例
CREATE TABLE dbo.Strings( -- その他の列, WholeString VARCHAR(4000), Substring AS (CONVERT(VARCHAR(10), WholeString) PERSISTED);CREATE INDEX ss ON dbo.Strings(Substring);コード> プレ>
更新する行を検索するときは、次のように言えます:
WHERE s.Substring =LEFT(@string, 10)AND s.WholeString =@string;
プレ>
これは少なくとも、オプティマイザが検索を正確に一致する可能性が最も高いインデックス ページに絞り込むのに役立ちます。その長さは、類似した文字列がいくつあるか、オプティマイザーが単一のページを取り除くのに最も役立つものによって異なるため、実験することをお勧めします。 ss
に他の列の一部またはすべてを含めて実験することもできます。 INCLUDE
を使用するか使用しないかのインデックス 句 (これが役立つかどうかは、更新クエリが他に行うこと、読み取り/書き込み比率など、さまざまな要因によって大きく異なります)。