Sayangnya, menurut dokumentasi MySQL SELECT , "klausa HAVING diterapkan hampir terakhir, tepat sebelum item dikirim ke klien, tanpa pengoptimalan."
Perbedaannya adalah bahwa kueri pertama akan menggunakan indeks teks lengkap untuk menghitung relevansi hanya untuk baris yang memiliki 'Bob' di name
. Kueri kedua akan menghitung relevansi untuk semua baris, lalu buang sebagian besar (mungkin setelah menyortir seluruh tabel). Oleh karena itu, kueri kedua secara signifikan lebih lambat. Bahkan jika Anda memasukkan klausa ORDER BY ke kueri pertama, itu masih akan lebih cepat daripada menggunakan HAVING:
SELECT name, MATCH(name) AGAINST('Bob') AS relevance
FROM users
WHERE MATCH(name) AGAINST('Bob')
ORDER BY relevance DESC
Secara umum, "jangan gunakan HAVING untuk item yang seharusnya ada di klausa WHERE."