Rất tiếc, theo tài liệu MySQL SELECT , "mệnh đề HAVING được áp dụng gần như cuối cùng, ngay trước khi các mục được gửi đến khách hàng, không có sự tối ưu hóa."
Sự khác biệt là truy vấn đầu tiên sẽ sử dụng chỉ mục toàn văn bản để tính toán mức độ liên quan chỉ cho các hàng có 'Bob' trong name
. Truy vấn thứ hai sẽ tính toán mức độ liên quan cho tất cả , sau đó loại bỏ hầu hết chúng (có thể sau khi sắp xếp toàn bộ bảng). Do đó, truy vấn thứ hai chậm hơn đáng kể. Ngay cả khi bạn đặt mệnh đề ORDER BY vào truy vấn đầu tiên, nó vẫn sẽ nhanh hơn so với việc sử dụng HAVING:
SELECT name, MATCH(name) AGAINST('Bob') AS relevance
FROM users
WHERE MATCH(name) AGAINST('Bob')
ORDER BY relevance DESC
Nói chung, "không sử dụng HAVING cho các mục cần có trong mệnh đề WHERE."