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

Sintassi alternativa per la ricerca fulltext di MySQL

Sfortunatamente, secondo la documentazione MySQL SELECT , "la clausola HAVING viene applicata quasi per ultima, appena prima dell'invio degli articoli al cliente, senza alcuna ottimizzazione."

La differenza è che la prima query utilizzerà l'indice fulltext per calcolare la pertinenza solo per le righe che hanno 'Bob' in name . La seconda query calcolerà la pertinenza per tutti righe, quindi eliminane la maggior parte (possibilmente dopo aver ordinato l'intera tabella). Pertanto, la seconda query è notevolmente più lenta. Anche se inserisci la clausola ORDER BY nella prima query, sarà comunque più veloce rispetto all'utilizzo di HAVING:

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

In generale, "non utilizzare HAVING per elementi che dovrebbero essere nella clausola WHERE".