Sfortunatamente, secondo la documentazione MySQL SELECT , "la clausola HAVING viene applicata quasi per ultima, appena prima dell'invio degli articoli al cliente, senza alcuna ottimizzazione."
La differenza è che la prima query utilizzerà l'indice fulltext per calcolare la pertinenza solo per le righe che hanno 'Bob' in name
. La seconda query calcolerà la pertinenza per tutti righe, quindi eliminane la maggior parte (possibilmente dopo aver ordinato l'intera tabella). Pertanto, la seconda query è notevolmente più lenta. Anche se inserisci la clausola ORDER BY nella prima query, sarà comunque più veloce rispetto all'utilizzo di HAVING:
SELECT name, MATCH(name) AGAINST('Bob') AS relevance
FROM users
WHERE MATCH(name) AGAINST('Bob')
ORDER BY relevance DESC
In generale, "non utilizzare HAVING per elementi che dovrebbero essere nella clausola WHERE".