あなたの文字列が長い900バイトを超える場合、それは関係なく、それが変数または固定長であるかどうかの、インデックスキーにすることはできません。
1つの考えは、計算された列を追加することによって、少なくともシークをより選択的にすることです。例えば
CREATE TABLE dbo.Strings
(
-- other columns,
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;
これは、少なくともオプティマイザがダウンして完全一致が最も可能性が高いインデックス・ページへの検索を絞り込むのに役立ちますライブ。その長さは、似たような文字列の数とオプティマイザが単一のページを除外するのに最適なものによって異なります。また、INCLUDE
句を使用するかどうかにかかわらず、インデックスの他の列の一部またはすべてを含めることを試してみることもできます(これが有用かどうかは、更新クエリのその他の機能、読み取り/書き込み比率など)。
文字列はどのくらいですか?実際のエラーとは何ですか?シークをより満足させるために、インデックスの目的は何ですか? –
SQL Serverのインデックスは、インデックスエントリごとに**最大900バイト**になります。文字列がそれよりも長い場合は**インデックスできません。 **あなたの正確で完全なテーブル構造**を見せてください! –