Mysql
 sql >> Base de données >  >> RDS >> Mysql

Syntaxe de recherche en texte intégral MySQL alternative

Malheureusement, selon la Documentation MySQL SELECT , "la clause HAVING est appliquée presque en dernier, juste avant l'envoi des éléments au client, sans optimisation."

La différence est que la première requête utilisera l'index de texte intégral pour calculer la pertinence uniquement pour les lignes qui ont 'Bob' dans name . La deuxième requête calculera la pertinence pour tous rangées, puis supprimez la plupart d'entre elles (éventuellement après avoir trié toute la table). Par conséquent, la deuxième requête est nettement plus lente. Même si vous mettez la clause ORDER BY sur la première requête, ce sera toujours plus rapide que d'utiliser HAVING :

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

En général, "n'utilisez pas HAVING pour les éléments qui devraient être dans la clause WHERE."