Nếu chuỗi của bạn dài hơn 900 byte, thì nó không thể là khóa chỉ mục, bất kể đó là độ dài thay đổi hay cố định.
Một ý tưởng là ít nhất sẽ làm cho các tìm kiếm có chọn lọc hơn bằng cách thêm một cột được tính toán. ví dụ:
CREATE TABLE dbo.Strings
(
-- other columns,
WholeString VARCHAR(4000),
Substring AS (CONVERT(VARCHAR(10), WholeString) PERSISTED
);
CREATE INDEX ss ON dbo.Strings(Substring);
Bây giờ khi tìm kiếm một hàng để cập nhật, bạn có thể nói:
WHERE s.Substring = LEFT(@string, 10)
AND s.WholeString = @string;
Điều này ít nhất sẽ giúp trình tối ưu hóa thu hẹp tìm kiếm xuống các trang chỉ mục nơi kết hợp chính xác có nhiều khả năng xuất hiện nhất. Bạn có thể muốn thử nghiệm với độ dài đó vì nó phụ thuộc vào số lượng chuỗi tương tự bạn có và điều gì sẽ giúp trình tối ưu hóa loại bỏ một trang tốt nhất. Bạn cũng có thể muốn thử nghiệm với việc bao gồm một số hoặc tất cả các cột khác trong ss
chỉ mục, có hoặc không sử dụng INCLUDE
(liệu điều này có hữu ích hay không sẽ thay đổi rất nhiều tùy thuộc vào các yếu tố khác nhau, chẳng hạn như truy vấn cập nhật của bạn làm gì khác, tỷ lệ đọc / ghi, v.v.).