Hvis din streng er længere end 900 bytes, kan den ikke være en indeksnøgle, uanset om den er variabel eller fast længde.
En idé ville være i det mindste at gøre søgninger mere selektive ved at tilføje en beregnet kolonne. f.eks.
CREATE TABLE dbo.Strings
(
-- other columns,
WholeString VARCHAR(4000),
Substring AS (CONVERT(VARCHAR(10), WholeString) PERSISTED
);
CREATE INDEX ss ON dbo.Strings(Substring);
Når du nu søger efter en række, der skal opdateres, kan du sige:
WHERE s.Substring = LEFT(@string, 10)
AND s.WholeString = @string;
Dette vil i det mindste hjælpe optimeringsværktøjet med at indsnævre sin søgning til de indekssider, hvor det nøjagtige match er mest sandsynligt. Det kan være en god ide at eksperimentere med den længde, da det afhænger af, hvor mange ens strenge du har, og hvad der bedst hjælper optimeringsværktøjet med at luge en enkelt side ud. Du vil måske også eksperimentere med at inkludere nogle eller alle de andre kolonner i ss
indeks, med eller uden brug af INCLUDE
klausul (om dette er nyttigt vil variere meget af forskellige faktorer, såsom hvad din opdateringsforespørgsel ellers gør, læse/skriveforhold osv.).