Ако вашият низ е по-дълъг от 900 байта, той не може да бъде индексен ключ, независимо дали е с променлива или фиксирана дължина.
Една идея би била поне да направим търсенето по-селективно чрез добавяне на изчислена колона. напр.
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;
Това поне ще помогне на оптимизатора да стесни търсенето си до индексираните страници, където е най-вероятно да съществува точното съвпадение. Може да искате да експериментирате с тази дължина, тъй като зависи от това колко подобни низове имате и какво най-добре ще помогне на оптимизатора да отсее една страница. Може също да искате да експериментирате с включването на някои или всички други колони в ss
индекс, със или без използване на INCLUDE
клауза (дали това е полезно ще варира значително в зависимост от различни фактори, като например какво друго прави вашата заявка за актуализиране, съотношение четене/запис и т.н.).