Si votre chaîne fait plus de 900 octets, elle ne peut pas être une clé d'index, qu'elle soit de longueur variable ou fixe.
Une idée serait au moins de rendre les recherches plus sélectives en ajoutant une colonne calculée. ex.
CREATE TABLE dbo.Strings
(
-- other columns,
WholeString VARCHAR(4000),
Substring AS (CONVERT(VARCHAR(10), WholeString) PERSISTED
);
CREATE INDEX ss ON dbo.Strings(Substring);
Désormais, lorsque vous recherchez une ligne à mettre à jour, vous pouvez dire :
WHERE s.Substring = LEFT(@string, 10)
AND s.WholeString = @string;
Cela aidera au moins l'optimiseur à affiner sa recherche jusqu'aux pages d'index où la correspondance exacte est la plus susceptible de se trouver. Vous voudrez peut-être expérimenter cette longueur car cela dépend du nombre de chaînes similaires que vous avez et de ce qui aidera le mieux l'optimiseur à éliminer une seule page. Vous pouvez également essayer d'inclure certaines ou toutes les autres colonnes dans le ss
index, avec ou sans l'utilisation de INCLUDE
clause (son utilité variera considérablement en fonction de divers facteurs tels que ce que fait votre requête de mise à jour, le rapport lecture/écriture, etc.).