Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Alternative MySQL-Volltextsuchsyntax

Leider laut der MySQL SELECT-Dokumentation , "Die HAVING-Klausel wird fast zuletzt angewendet, kurz bevor Elemente an den Client gesendet werden, ohne Optimierung."

Der Unterschied besteht darin, dass die erste Abfrage den Volltextindex verwendet, um die Relevanz nur zu berechnen für Zeilen mit 'Bob' in name . Die zweite Abfrage berechnet die Relevanz für alle Zeilen, und verwerfen Sie dann die meisten von ihnen (möglicherweise nach dem Sortieren der gesamten Tabelle). Daher ist die zweite Abfrage deutlich langsamer. Selbst wenn Sie die ORDER BY-Klausel in die erste Abfrage einfügen, ist dies immer noch schneller als die Verwendung von HAVING:

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

Im Allgemeinen „verwenden Sie HAVING nicht für Elemente, die in der WHERE-Klausel stehen sollten.“