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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Опимизация запроса LIKE

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Sig
Отправлено: 23 Января, 2013 - 09:31:21
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Здравствуйте подскажите можно как-то оптимизировать запрос что б была меньшая нагрузка
типа (только раза в 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 '%семочки%')
 
 Top
Zuldek
Отправлено: 23 Января, 2013 - 10:33:29
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Только посредством ограничения LIMIT или отказа от LIKE.
Если поля по которым идет сравнение можно сделать индексами, то они должны ими быть.
Если можно оформить запрос как процедуру, то это ускорит выполнение выборки.- (исправлено) в данном случае неверно
Если результат запроса можно кешировать - кешируйте.
Если подобным методом у вас организован поиск, лучше избавить СУБД от этой работы и посмотреть в строну сфинкса.

(Отредактировано автором: 23 Января, 2013 - 10:58:23)

 
 Top
Мелкий Супермодератор
Отправлено: 23 Января, 2013 - 10:41:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Zuldek пишет:
то они должны ими быть.

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

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

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

Sig, догадываюсь о двух вариантах:
0) это поиск текста - тогда используйте Sphinx или на худой конец полнотекстовый поиск mysql'а
1) это множественные категории товаров, по непостижимой странной идее засунутые в одно поле через какой-либо разделитель. Переделайте в нормальную трёхтабличную структуру многие-ко-многим.


-----
PostgreSQL DBA
 
 Top
Zuldek
Отправлено: 23 Января, 2013 - 10:54:15
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




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

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

По процедурам, соглашусь. Тут выигрыша, по крайней мере с точки зрения производительности не будет, что не сказать об остальном.

(Отредактировано автором: 23 Января, 2013 - 10:56:46)

 
 Top
Sig
Отправлено: 23 Января, 2013 - 11:27:58
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Это фильтр товаров
просто все характеристики в 1-м столбце, я разделитель использовал как | между ними

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

спасибо за советы буду изучать
 
 Top
Zuldek
Отправлено: 23 Января, 2013 - 13:43:42
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Sig пишет:
Это фильтр товаров
просто все характеристики в 1-м столбце, я разделитель использовал как | между ними

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

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

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

(Отредактировано автором: 23 Января, 2013 - 13:45:01)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB