Nhận xét ban đầu của tôi, Tôi cho rằng tên đầy đủ của máy tính tương tự như FirstName + '' + LastName - bạn có thể thực hiện truy vấn tên đầu tiên như 'Carl%' và họ như 'Gari%' không nhằm thu thập thông tin. Cảm ơn bạn đã trả lời nó.
Bản thân tôi chưa thử điều này (và nó chỉ quan trọng với môi trường của bạn), nhưng bạn có thể thêm các mệnh đề tương tự vào truy vấn dựa trên chứa và so sánh các kế hoạch truy vấn với phiên bản chứa.
Có 3 truy vấn có thể có các truy vấn rõ ràng
A Contains version -- your existing query
A Like Version -- as I commented
A Combined version -- using like and contains
Tôi không nghĩ rằng bạn nhất thiết phải đúng khi sử dụng tìm kiếm chỉ mục đầy đủ luôn nhanh hơn phiên bản LIKE, bởi vì tôi nghĩ câu trả lời chính xác là, điều đó phụ thuộc.
Nếu bạn có chỉ mục trên họ (hoặc cả tên nữa), phiên bản "like" sẽ thực hiện tra cứu đã lập chỉ mục. Nó sẽ phụ thuộc vào phân phối khóa của bạn và tỷ lệ phần trăm khớp. Tức là, tìm kiếm họ như 'G%' và họ như 'Carl%' hơn 'Gari%' và 'Carl%' sẽ chậm hơn nhiều nếu chỉ lập chỉ mục trên họ. Vì vậy, nếu bạn có các phím tìm kiếm đủ dài, phiên bản LIKE có thể sẽ nhanh hơn phiên bản chứa. Bạn sẽ phải kiểm tra để biết chắc chắn điều gì hoạt động tốt nhất.
Có thể là phiên bản kết hợp luôn là lựa chọn tốt nhất hoặc ít nhất là đủ tốt. Nhưng tôi chắc chắn sẽ thử điều này đầu tiên trước khi thực hiện theo chiến lược bên dưới.
Chiến lược tổng thể mà tôi muốn đề xuất là:
Ngừng sử dụng tìm kiếm gia tăng cho đến khi người dùng nhập vào ít nhất một vài ký tự - bạn có thể phải trả rất nhiều hiệu suất khi làm như vậy vì nó hầu như không có giá trị thực sự đối với người dùng trang web của bạn. Như một gợi ý, không thực hiện tìm kiếm gia tăng trước khi họ nhập ít nhất 3 ký tự. Vì bạn đã không đề cập rằng bạn đã yêu cầu các ký tự tối thiểu trước khi tìm kiếm gia tăng.
Nếu điều này được phủ quyết, cùng một chiến lược cơ bản, nhưng bạn không gọi tìm kiếm tăng dần cho đến khi NN mili giây trôi qua kể từ khi ký tự cuối cùng được nhập hoặc ký tự số được nhập> độ dài nào đó. Trên thực tế, vì một số họ chỉ có 2 ký tự nên bạn phải sử dụng chiến lược này trong thực tế.
Tương tự như vậy, tôi sẽ không thực hiện bất kỳ tìm kiếm gia tăng nào bất kể độ dài bao nhiêu miễn là người dùng nhập nhanh các ký tự mới để tránh các tìm kiếm lãng phí mà người dùng không sử dụng.
Trừ khi truy vấn kết hợp luôn đủ tốt, hãy có hai procs được lưu trữ khác nhau trên máy chủ của bạn để trả lại kết quả tìm kiếm, một là phiên bản tương tự, một là phiên bản chứa. Gọi phiên bản được mong đợi để nhận được kết quả tốt nhất tùy thuộc vào mức độ tên được cung cấp.