Aktualizacja
Od MySQL 5.6
i później, InnoDB
table obsługuje Match... Against
.
Pierwszy to dużo lepszy. Na MyISAM tabele użyje indeksu pełnotekstowego względem tych kolumn. Drugi wykona pełne skanowanie tabeli, wykonując concat w każdym wierszu, a następnie porównanie.
LIKE
jest skuteczny tylko wtedy, gdy robisz to przeciwko:
- kolumna (nie wynik funkcji, chyba że dany dostawca bazy danych obsługuje indeksy funkcjonalne — na przykład Oracle — a Ty ich używasz);
- początek kolumny (np.
LIKE 'blah%'
w przeciwieństwie doLIKE '%blah%'
); i - kolumna, która jest indeksowana.
Jeśli którykolwiek z tych warunków nie jest spełniony, jedynym sposobem na wykonanie zapytania przez aparat SQL jest wykonanie pełnego skanowania tabeli. Może to być użyteczne pod około 10-20 tys. rzędów. Poza tym szybko staje się bezużyteczny.
Uwaga: Jednym z problemów z MATCH w MySQL jest to, że wydaje się, że pasuje tylko do całych słów, więc wyszukiwanie „bla” nie dopasuje kolumny z wartością „blah”, ale wyszukiwanie „bla*” tak.