Uppdatera
Från och med MySQL 5.6
och senare, InnoDB
tabeller stöder Match... Against
.
Den första är mycket bättre. På MyISAM tabeller kommer det att använda ett fulltextindex mot dessa kolumner. Den andra kommer att göra en hel tabell genom att göra en konkat på varje rad och sedan en jämförelse.
LIKE
är bara effektivt om du gör det mot:
- en kolumn (inte ett resultat av en funktion om inte din specifika databasleverantör stöder funktionella index--Oracle, till exempel--och du använder dem);
- starten av kolumnen (dvs
LIKE 'blah%'
i motsats tillLIKE '%blah%'
); och - en kolumn som är indexerad.
Om något av dessa villkor inte är sant är det enda sättet för SQL-motorn att köra frågan genom att göra en fullständig tabellskanning. Detta kan vara användbart under cirka 10-20 tusen rader. Utöver det blir den dock snabbt oanvändbar.
Obs! Ett problem med MATCH på MySQL är att det bara verkar matcha mot hela ord, så en sökning på 'bla' kommer inte att matcha en kolumn med värdet 'bla', men en sökning på 'bla*' kommer att göra det.