Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Sintaxe alternativa de pesquisa de texto completo do MySQL


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".