2012-03-27 4 views
1

Какой запрос быстрее и почему для базы данных с 1M-записями в таблице? Как я могу оптимизировать запрос? Первые один:Скорость между двумя разными запросами

SELECT id,column1,column2 FROM `table1` WHERE MATCH(column1) 
AGAINST('string1 string2 string3 ' in boolean mode) ORDER BY column2 ASC LIMIT 10 

Вторые один:

SELECT id,column1,column2 FROM `table1` WHERE column1 LIKE %string1% 
OR column1 LIKE %string2% OR column1 LIKE %string3% OR column2 LIKE %string1% 
OR column2 LIKE %string2% OR column2 LIKE %string3% OR column3 LIKE %string1% OR 
column3 LIKE %string2% OR column3 LIKE %string3% ORDER BY column2 ASC LIMIT 10 
+1

Вы можете протестировать его самостоятельно, выполнив 1k, 10k раз – safarov

ответ

3

Матч против полнотекстового поиска. Если вы создали индекс полнотекстового поиска для MySQL, он будет намного быстрее, чем LIKE '% ...%', потому что в этом случае индекса не будет.

Причина, по которой индекс «% ...%» не может быть индексом, заключается в том, что для создания индекса на каждой букве ваших строк просто не быстро.

Кроме того, эти два запроса имеют другую функцию, полнотекстовый индекс сканирует слова и используется только для слов. Вы не можете найти строку «emil» с «match to (« mi »в логическом режиме). Это не сработает. Конечно, как это работает.

0

like '%foo%' типа спичка делает невозможным использование индексов и БД придется делать полный просмотр таблицы каждый раз. Полнотекстовая версия ДОЛЖНА быть намного быстрее.

2

MATCH ... REPLACE будет быстрее читать, но дольше вставлять. Вам нужно будет создать на нем индекс. Вы также будете иметь много требований, если вы хотите использовать, что (он работает только на таблицах MyISAM)

Вы должны прочитать: http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

И здесь ограничения я говорил: http://dev.mysql.com/doc/refman/5.0/en/fulltext-restrictions.html

+0

ссылка, которую вы предоставили, на французском языке .... плохой, что я только начинаю на французском! :) Спасибо за ответ ... Я только проголосую! –

+0

Wooops my bad. ссылка прямо сейчас :) – haltabush

Смежные вопросы