sql >> Database teknologi >  >> RDS >> Mysql

Alternativ MySQL fuldtekst søgesyntaks

Desværre ifølge MySQL SELECT-dokumentationen , "HAVING-klausulen anvendes næsten sidst, lige før varer sendes til klienten, uden optimering."

Forskellen er, at den første forespørgsel vil bruge fuldtekstindekset til at beregne relevansen kun for rækker, der har 'Bob' i name . Den anden forespørgsel vil beregne relevansen for alle rækker, så smid de fleste ud (evt. efter sortering af hele bordet). Derfor er den anden forespørgsel betydeligt langsommere. Selvom du sætter ORDER BY-sætningen på den første forespørgsel, vil det stadig være hurtigere end at bruge HAVING:

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

Generelt "brug ikke HAVING til elementer, der skal være i WHERE-sætningen."




  1. Indsæt underforespørgsel i Vælg forespørgsel

  2. MySQL-forespørgsel:Match kommasepareret værdi med kolonne, der indeholder kommasepareret streng

  3. I Flask-migrer ValueError:ugyldig interpolationssyntaks i forbindelsesstreng ved position 15

  4. behov for at flytte data fra et felt til et andet inden for samme tabel