sql >> Database >  >> RDS >> Mysql

Alternatieve MySQL-syntaxis voor volledige tekst zoeken

Helaas, volgens de MySQL SELECT-documentatie , "de HAVING-clausule wordt bijna als laatste toegepast, net voordat artikelen naar de klant worden verzonden, zonder optimalisatie."

Het verschil is dat de eerste zoekopdracht de volledige tekstindex gebruikt om de relevantie alleen . te berekenen voor rijen met 'Bob' in name . De tweede zoekopdracht berekent de relevantie voor alle rijen en gooi dan de meeste weg (mogelijk na het sorteren van de hele tabel). Daarom is de tweede query aanzienlijk langzamer. Zelfs als u de ORDER BY-component op de eerste query plaatst, zal het nog steeds sneller zijn dan HAVING te gebruiken:

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

In het algemeen, "gebruik HAVING niet voor items die in de WHERE-clausule zouden moeten staan."




  1. Invoegen, bij dubbele update in PostgreSQL?

  2. Fix "INSERT heeft meer expressies dan doelkolommen" in PostgreSQL

  3. Snelheid:MySQL versus bestandsuitvoer

  4. mysql auto increment error