sql >> Base de Datos >  >> RDS >> Mysql

Sintaxis alternativa de búsqueda de texto completo de MySQL

Desafortunadamente, según la documentación de MySQL SELECT , "la cláusula HAVING se aplica casi al final, justo antes de que los elementos se envíen al cliente, sin optimización".

La diferencia es que la primera consulta utilizará el índice de texto completo para calcular la relevancia solo para filas que tienen 'Bob' en name . La segunda consulta calculará la relevancia para todos filas, luego deseche la mayoría de ellos (posiblemente después de ordenar toda la tabla). Por lo tanto, la segunda consulta es significativamente más lenta. Incluso si coloca la cláusula ORDER BY en la primera consulta, seguirá siendo más rápido que usar HAVING:

SELECT name, MATCH(name) AGAINST('Bob') AS relevance
FROM users
WHERE MATCH(name) AGAINST('Bob')
ORDER BY relevance DESC

En general, "no utilice HAVING para elementos que deberían estar en la cláusula WHERE".