Jika string Anda lebih panjang dari 900 byte, maka itu tidak bisa menjadi kunci indeks, terlepas dari apakah panjangnya variabel atau tetap.
Satu ide adalah setidaknya membuat pencarian lebih selektif dengan menambahkan kolom yang dihitung. misalnya
CREATE TABLE dbo.Strings
(
-- other columns,
WholeString VARCHAR(4000),
Substring AS (CONVERT(VARCHAR(10), WholeString) PERSISTED
);
CREATE INDEX ss ON dbo.Strings(Substring);
Sekarang saat mencari baris untuk diperbarui, Anda dapat mengatakan:
WHERE s.Substring = LEFT(@string, 10)
AND s.WholeString = @string;
Ini setidaknya akan membantu pengoptimal mempersempit pencariannya ke halaman indeks di mana kecocokan persisnya paling mungkin hidup. Anda mungkin ingin bereksperimen dengan panjang itu karena tergantung pada berapa banyak string serupa yang Anda miliki dan apa yang paling membantu pengoptimal menyingkirkan satu halaman. Anda mungkin juga ingin bereksperimen dengan menyertakan beberapa atau semua kolom lain di ss
indeks, dengan atau tanpa menggunakan INCLUDE
klausa (apakah ini berguna akan sangat bervariasi pada berbagai faktor seperti apa lagi yang dilakukan kueri pembaruan Anda, rasio baca/tulis, dll).