sql >> Databáze >  >> RDS >> Mysql

Alternativní syntaxe fulltextového vyhledávání MySQL

Bohužel podle dokumentace MySQL SELECT , "klauzule HAVING se aplikuje téměř jako poslední, těsně před odesláním položek klientovi, bez optimalizace."

Rozdíl je v tom, že první dotaz použije fulltextový index k výpočtu relevance pouze pro řádky, které mají 'Bob' v name . Druhý dotaz vypočítá relevanci pro všechny řádky, pak většinu z nich vyhodit (možná až po seřazení celé tabulky). Druhý dotaz je tedy výrazně pomalejší. I když do prvního dotazu vložíte klauzuli ORDER BY, bude to stále rychlejší než použití HAVING:

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

Obecně platí, že "nepoužívejte HAVING pro položky, které by měly být v klauzuli WHERE."




  1. MySQL SHA() nefunguje

  2. Jak změnit řazení na utf8_bin jedním tahem

  3. Jak nastavit hodnotu vícenásobného výběru z objektu pole v yii2 při aktualizaci

  4. Co je STATISTICKÝ PROFIL na serveru SQL Server?