Bạn có khả năng có thể thấy những cải thiện hiệu suất bằng cách thêm chỉ mục (es), nó phụ thuộc rất nhiều vào các chi tiết cụ thể :)
bao nhiêu phần trăm tổng kích thước của hàng là cột xác của bạn? Bạn mong đợi bao nhiêu hàng? Bạn có cần trả về tất cả các hàng khớp với vị từ hoặc chỉ các hàng trên cùng hoặc hàng đầu n không?
Nếu bạn đang tìm kiếm các giá trị có độ chọn lọc/tính duy nhất cao (vì vậy ít hàng để trả về) và cột được xác định là một phần nhỏ của toàn bộ kích thước hàng, chỉ mục có thể khá hữu ích. Nó vẫn sẽ là một lần quét, nhưng chỉ mục của bạn sẽ phù hợp với nhiều hàng trên mỗi trang hơn so với bảng nguồn.
Dưới đây là một ví dụ trong đó tổng kích thước hàng lớn hơn nhiều so với kích thước cột để tìm kiếm trên:
create table t1 (v1 varchar(100), b1 varbinary(8000))
go
--add 10k rows of filler
insert t1 values ('abc123def', cast(replicate('a', 8000) as varbinary(8000)))
go 10000
--add 1 row to find
insert t1 values ('abc456def', cast(replicate('a', 8000) as varbinary(8000)))
go
set statistics io on
go
select * from t1 where v1 like '%456%'
--shows 10001 logical reads
--create index that only contains the column(s) to search across
create index t1i1 on t1(v1)
go
select * from t1 where v1 like '%456%'
--or can force to
--shows 37 logical reads
Nếu bạn nhìn vào kế hoạch thực hiện thực tế bạn sẽ nhìn thấy động cơ quét chỉ mục và đã làm một tra cứu dấu trang trên hàng phù hợp. Hoặc bạn có thể yêu cầu trình tối ưu hóa trực tiếp sử dụng chỉ mục, nếu nó không quyết định sử dụng kế hoạch này một mình: chọn * từ t1 với (chỉ mục (t1i1)) trong đó v1 như '% 456%'
Nếu bạn có một loạt các cột để tìm kiếm chỉ trên một vài cột có tính chọn lọc cao, bạn có thể tạo nhiều chỉ mục và sử dụng phương pháp giảm. Ví dụ. trước tiên hãy xác định một tập hợp các ID (hoặc bất kỳ PK nào của bạn) từ chỉ mục có chọn lọc cao của bạn, sau đó tìm kiếm các cột ít chọn lọc của bạn hơn bằng bộ lọc chống lại tập hợp PK nhỏ đó.
Nếu bạn luôn cần phải trả lại một tập hợp lớn các hàng, bạn gần như chắc chắn sẽ tốt hơn với việc quét bảng.
Vì vậy, các tối ưu hóa có thể phụ thuộc rất nhiều vào các chi tiết cụ thể về định nghĩa bảng và tính chọn lọc dữ liệu của bạn.
HTH! -Adrian
Cảm ơn, đó là điều tôi nghĩ không may. Tôi đã loại bỏ một số mệnh đề LIKE để giúp tăng tốc độ lên một chút. – schooner