Cập nhật
Kể từ MySQL 5.6
và sau này, InnoDB
bảng hỗ trợ Match... Against
.
Đầu tiên là nhiều tốt hơn. Trên MyISAM bảng nó sẽ sử dụng một chỉ mục văn bản đầy đủ đối với các cột đó. Người kia sẽ thực hiện quét toàn bộ bảng, thực hiện ghép nối trên mọi hàng và sau đó so sánh.
LIKE
chỉ hiệu quả nếu bạn chống lại:
- một cột (không phải là kết quả của một hàm trừ khi nhà cung cấp cơ sở dữ liệu cụ thể của bạn hỗ trợ các chỉ mục chức năng - ví dụ như Oracle - và bạn đang sử dụng chúng);
- đầu cột (tức là
LIKE 'blah%'
trái ngược vớiLIKE '%blah%'
); và - một cột đã được lập chỉ mục.
Nếu bất kỳ một trong những điều kiện đó không đúng, cách duy nhất để công cụ SQL thực thi truy vấn là thực hiện quét toàn bộ bảng. Điều này có thể được sử dụng dưới khoảng 10-20 nghìn hàng. Ngoài ra, nó nhanh chóng không sử dụng được.
Lưu ý: Một vấn đề với MATCH trên MySQL là nó dường như chỉ khớp với toàn bộ các từ nên tìm kiếm 'bla' sẽ không khớp với cột có giá trị là 'blah', nhưng tìm kiếm 'bla *' sẽ phù hợp.