Обновление
Начиная с MySQL 5.6
и более поздних версий, таблицы InnoDB
поддерживают Match... Against
.
Первый намного лучше. В таблицах MyISAM будет использоваться полнотекстовый индекс для этих столбцов. Другой выполнит полное сканирование таблицы, выполнив конкатат по каждой строке, а затем проведет сравнение.
LIKE
эффективен, только если вы делаете это против:
- столбец (не результат функции, если только ваш конкретный поставщик баз данных не поддерживает функциональные индексы - например, Oracle - и вы используете их);
- начало столбца (т.е.
LIKE 'blah%'
в отличие от LIKE '%blah%'
); и
- столбец, который проиндексирован.
Если какое-либо из этих условий не выполняется, единственным механизмом SQL для выполнения запроса является полное сканирование таблицы. Это может быть использовано под 10-20 тысяч строк. Однако после этого он быстро становится непригодным для использования.
Примечание: Одна из проблем с MATCH в MySQL заключается в том, что он, похоже, сопоставляется только с целыми словами, поэтому при поиске «bla» столбец не будет соответствовать значению «blah», но поиск 'bla *' будет.