OR UPPER(lu.opis) LIKE UPPER('%SomeName%')
có 3 vấn đề về hiệu suất:
-
OR
được tối ưu hóa kém. Về cơ bản, bảng phải được quét để kiểm tra tất cả các hàng. Các chỉ mục không có khả năng giúp ích. -
UPPER(indexed-column)
ngăn cản việc sử dụng chỉ mục trên cột đó. Điều này dễ dàng thực hiện xung quanh việc khai báo cột đó cóCOLLATION
đó là "phân biệt chữ hoa chữ thường" - có nghĩa làutf8_unicode_ci
; lưu ý_ci
. -
LIKE '%...
không thể sử dụng chỉ mục vì đứng đầu ký tự đại diện.
Ngoài ra, thường là ngu ngốc khi có
32497 row(s) returned
Bạn sẽ làm gì với nhiều hàng đó? Thời gian chuyển mạng sẽ rất đáng kể, ngay cả khi bản thân truy vấn không.
Để "giải quyết" LIKE
, OR
và UPPER
tất cả các vấn đề cùng một lúc, tập hợp văn bản lại với nhau thành một cột duy nhất trong một bảng duy nhất. Sau đó, cung cấp FULLTEXT
chỉ mục trên cột đó. MATCH ... AGAINST ...
sẽ chạy nhanh hơn rất nhiều - ít nhất là để thực hiện SomeName
Tìm kiếm. (LEFT JOINs
là một vấn đề khác.)