Pokud je váš řetězec delší než 900 bajtů, nemůže to být indexový klíč, bez ohledu na to, zda má proměnnou nebo pevnou délku.
Jedním z nápadů by bylo alespoň učinit vyhledávání selektivnější přidáním vypočítaného sloupce. např.
CREATE TABLE dbo.Strings
(
-- other columns,
WholeString VARCHAR(4000),
Substring AS (CONVERT(VARCHAR(10), WholeString) PERSISTED
);
CREATE INDEX ss ON dbo.Strings(Substring);
Nyní při hledání řádku k aktualizaci můžete říci:
WHERE s.Substring = LEFT(@string, 10)
AND s.WholeString = @string;
To alespoň pomůže optimalizátoru zúžit vyhledávání na indexové stránky, kde se s největší pravděpodobností vyskytuje přesná shoda. Možná budete chtít experimentovat s touto délkou, protože závisí na tom, kolik podobných řetězců máte a co optimalizátoru nejlépe pomůže vyřadit jednu stránku. Můžete také experimentovat se zahrnutím některých nebo všech ostatních sloupců do ss
index, s nebo bez použití INCLUDE
klauzule (zda je to užitečné, se bude značně lišit v závislosti na různých faktorech, jako je například to, co ještě dělá váš aktualizační dotaz, poměr čtení/zápisu atd.).