Bohužel podle dokumentace MySQL SELECT , "klauzule HAVING se aplikuje téměř jako poslední, těsně před odesláním položek klientovi, bez optimalizace."
Rozdíl je v tom, že první dotaz použije fulltextový index k výpočtu relevance pouze pro řádky, které mají 'Bob' v name
. Druhý dotaz vypočítá relevanci pro všechny řádky, pak většinu z nich vyhodit (možná až po seřazení celé tabulky). Druhý dotaz je tedy výrazně pomalejší. I když do prvního dotazu vložíte klauzuli ORDER BY, bude to stále rychlejší než použití HAVING:
SELECT name, MATCH(name) AGAINST('Bob') AS relevance
FROM users
WHERE MATCH(name) AGAINST('Bob')
ORDER BY relevance DESC
Obecně platí, že "nepoužívejte HAVING pro položky, které by měly být v klauzuli WHERE."