Tyvärr, enligt MySQL SELECT-dokumentationen , "HAVING-satsen tillämpas nästan sist, precis innan objekt skickas till klienten, utan optimering."
Skillnaden är att den första frågan använder fulltextindexet för att beräkna relevansen endast för rader som har 'Bob' i name
. Den andra frågan kommer att beräkna relevansen för alla rader, släng sedan ut de flesta (eventuellt efter att ha sorterat hela tabellen). Därför är den andra frågan betydligt långsammare. Även om du lägger ORDER BY-satsen på den första frågan, kommer det fortfarande att gå snabbare än att använda HAVING:
SELECT name, MATCH(name) AGAINST('Bob') AS relevance
FROM users
WHERE MATCH(name) AGAINST('Bob')
ORDER BY relevance DESC
I allmänhet, "använd inte HAVING för objekt som ska finnas i WHERE-satsen."