Infelizmente, de acordo com a documentação do MySQL SELECT , "a cláusula HAVING é aplicada quase por último, logo antes de os itens serem enviados ao cliente, sem otimização."
A diferença é que a primeira consulta usará o índice de texto completo para calcular a relevância somente para linhas que têm 'Bob' em
name
. A segunda consulta calculará a relevância para todos linhas e, em seguida, descarte a maioria delas (possivelmente depois de classificar a tabela inteira). Portanto, a segunda consulta é significativamente mais lenta. Mesmo se você colocar a cláusula ORDER BY na primeira consulta, ainda será mais rápido do que usar HAVING:SELECT name, MATCH(name) AGAINST('Bob') AS relevance
FROM users
WHERE MATCH(name) AGAINST('Bob')
ORDER BY relevance DESC
Em geral, "não use HAVING para itens que deveriam estar na cláusula WHERE".