Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Опитимизация SELECT ... LIKE '%слово%' (Nikus) 04/05/2006 - 11:32:54
      Re: Опитимизация SELECT ... LIKE '%слово%' (NickAssa) 04/05/2006 - 11:46:23
      Re: Опитимизация SELECT ... LIKE '%слово%' (Dinky) 04/05/2006 - 23:16:06
      Re: Опитимизация SELECT ... LIKE '%слово%' (Nikus) 05/05/2006 - 13:56:08

> Original message text:
> From: Nikus - 04/05/2006 - 11:32:54
> Subject:Опитимизация SELECT ... LIKE '%слово%'
> -----------------
> Доброго времени суток.
>
> Итак, есть таблица с именами файлов, их атрибутами и прочим. По полю name есть индекс. Когда я делаю запрос типа:
> SELECT ... WHERE name LIKE '%слово%'
> то время выполнения оного составляет ~1.5 сек. Если же я делаю запрос
> SELECT ... WHERE name LIKE '%слово%' ORDER BY name
> то запрос выполняется ~15 сек.
>
> Я понимаю, что сортировка результатов по такой строке поиска не может выолняться через индекс. Однако почему тогда выборка результатов без сортировки происхожит так быстро?
> Да и как можно сортировать 13.5 сек 10 строк результата?
>
> MySQL 5.0.20, в таблице 1.6 млн. записей.
>


From: Nikus - 05/05/2006 - 13:56:08
Subject:Опитимизация SELECT ... LIKE '%слово%'
-----------------
Я нашёл причину. На самом деле в моём запросе были ещё операции сравнения в WHERE. У меня было много индексов по разным полям, а оказалось надо сделать один индекс по многим полям :)
Спасибо http://mysql.ru/docs/man/MySQL_indexes.html

Теперь, если запрос был слово% или с%ово, то используется индекс (время поиска 0.01 и 0.5 сек соответственно), а если %слово - то всегда 1.5 сек с сортировкой по любому полю (включённым в индекс), при этом EXPLAIN пишет extra: using filesort

Посмотрел в taskmanager'e, действительно, во время такого запроса происходит чтение моей 148 мегабайтной таблицы. При этом в эти 1.5 сек CPU usage даже не достигает 100%! Я поражён алгоритмом поиска MySQL! :)

Спасибо всем


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
27690



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |