Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Опимизация запроса LIKE
Форумы портала PHP.SU » » Вопросы новичков » Опимизация запроса LIKE

Страниц (1): [1]
 

1. Sig - 23 Января, 2013 - 09:31:21 - перейти к сообщению
Здравствуйте подскажите можно как-то оптимизировать запрос что б была меньшая нагрузка
типа (только раза в 2-3 больше будет)

PHP:
скопировать код в буфер обмена
  1. category_products LIKE '%арбуз%' AND category_products LIKE '%дыня%' AND category_products LIKE '%виноград%' AND category_products LIKE '%шоколад%' AND (category_products LIKE '%орех%' OR category_products LIKE '%карамель%' OR category_products LIKE '%семочки%')
2. Zuldek - 23 Января, 2013 - 10:33:29 - перейти к сообщению
Только посредством ограничения LIMIT или отказа от LIKE.
Если поля по которым идет сравнение можно сделать индексами, то они должны ими быть.
Если можно оформить запрос как процедуру, то это ускорит выполнение выборки.- (исправлено) в данном случае неверно
Если результат запроса можно кешировать - кешируйте.
Если подобным методом у вас организован поиск, лучше избавить СУБД от этой работы и посмотреть в строну сфинкса.
3. Мелкий - 23 Января, 2013 - 10:41:14 - перейти к сообщению
Zuldek пишет:
то они должны ими быть.

Не всегда. Пример автора - один из этих случаев, индекс будет бесполезен.

Zuldek пишет:
Если можно оформить запрос как процедуру, то это ускорит выполнение выборки.

Не повлияет. Т.к. разбор запроса на фоне fullscan'а - бесплатен.

Sig, догадываюсь о двух вариантах:
0) это поиск текста - тогда используйте Sphinx или на худой конец полнотекстовый поиск mysql'а
1) это множественные категории товаров, по непостижимой странной идее засунутые в одно поле через какой-либо разделитель. Переделайте в нормальную трёхтабличную структуру многие-ко-многим.
4. Zuldek - 23 Января, 2013 - 10:54:15 - перейти к сообщению
Мелкий пишет:
Не всегда. Пример автора - один из этих случаев, индекс будет бесполезен.

Если следовать предположению, что это действительно поиск, то шаблоны могут и будут строится скриптом, следовательно вполне вероятно, что и индекс может вполне быть использован.

По процедурам, соглашусь. Тут выигрыша, по крайней мере с точки зрения производительности не будет, что не сказать об остальном.
5. Sig - 23 Января, 2013 - 11:27:58 - перейти к сообщению
Это фильтр товаров
просто все характеристики в 1-м столбце, я разделитель использовал как | между ними

при фильтре делал LIKE '%|арбуз|%'

спасибо за советы буду изучать
6. Zuldek - 23 Января, 2013 - 13:43:42 - перейти к сообщению
Sig пишет:
Это фильтр товаров
просто все характеристики в 1-м столбце, я разделитель использовал как | между ними

при фильтре делал LIKE '%|арбуз|%'

спасибо за советы буду изучать

Пересмотрите структуру БД и вынесите типизацию в отдельные таблицы.
Такая структура, как у вас недопустима Улыбка

 

Powered by ExBB FM 1.0 RC1