![]() |
#1 |
Специалист
|
![]() Есть запрос:
PHP код:
Вроде всё просто, но я не гуру в mysql запросах и оказалось что запрос грузит сервер mysql. Как оптимизировать? |
![]() |
![]() |
![]() |
#3 |
Специалист
Регистрация: 16.03.2008
Сообщений: 256
Вес репутации: 205
![]() ![]() |
![]() ORDER BY RAND() - совсем не хорошо, RAND() даст случайное число 0....1 и смысла в Вашем запросе нет,
лучше сделайте двумя запросами (или вложенным запросом): 1) сначала посчитайте общее число записей по Вашему условию: всего_записей = SELECT COUNT(1) FROM `items` WHERE `i1` LIKE '%$catalog%' 2) потом выберите нужное количество записей подряд, зная общее кол-во записей SELECT bla-bla-bla... FROM `items` WHERE `i1` LIKE '%$catalog%' LIMIT RAND(всего_записей - требуется_записей), требуется_записей Если это не подходит, то читаем предыдущий совет от edne, с которым я полностью согласен, LIKE - это зло в случае большого количества записей |
![]() |
![]() |
![]() |
#5 | ||
Специалист
Регистрация: 15.07.2007
Адрес: Беларусь, но скоро будет РФ :)
Сообщений: 232
Вес репутации: 214
![]() ![]() ![]() ![]() |
![]() Цитата:
Тогда заменить на Цитата:
Добавлено через 2 минуты Если именно LIKE, то только связанную таблицу со всевозможными вариантами написания $catalog. Тогда можно будет вложенным запросом убрать LIKE.
__________________
Каб любить Беларусь нашу милую... требо в росных краях побывать... Последний раз редактировалось apple; 11.07.2009 в 20:41. Причина: Добавлено сообщение |
||
![]() |
![]() |
![]() |
#6 |
Специалист
|
![]() Правильно, выборка в зависимости от каталога.
Обдумываю как переделать базу и впредь на такое не натыкаться. А rand() всё же даёт не даёт случайное число, а случайным образом строки с таблицы. Иначе как при таком запросе всё время выдаются разные записи? :-) |
![]() |
![]() |
![]() |
#7 |
Специалист
Регистрация: 15.07.2007
Адрес: Беларусь, но скоро будет РФ :)
Сообщений: 232
Вес репутации: 214
![]() ![]() ![]() ![]() |
![]() Ну раз простая выборка, то сделай индексированными поля, по которым она идет и замени LIKE на = как я написал.
__________________
Каб любить Беларусь нашу милую... требо в росных краях побывать... |
![]() |
![]() |
![]() |
#8 | |
Эксперт
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 251
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Zergalius,
Цитата:
|
|
![]() |
![]() |
![]() |
#9 | |
Э̀҉к͜с͜͏п̧́е͟р̶т̧̕
Регистрация: 11.04.2008
Адрес: Маськва
Сообщений: 1,996
Вес репутации: 320
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Это зависит от соотношения жесткости ограничений по загрузке и объему. Так, например, я на своем проекте вынужден хранить данные в минимальном объеме, жертвуя быстродействием, т.к. их быстро становится слишком дохрена и важна экономия каждого байта в кортеже.
__________________
|
|
![]() |
![]() |
![]() |
#10 |
Специалист
|
![]() да вытаскивайте все что подходит условию, а рендомность в пхп уже делайте из массива данных.
__________________
|
![]() |
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ВЧ запрос | BossIT | Общие вопросы оптимизации | 4 | 02.06.2009 17:21 |
Помогите составить SQL запрос? | Fredy314 | Разработка и сопровождение сайтов | 7 | 02.06.2009 09:19 |
Запрос к MySQL | Ulf | Разработка и сопровождение сайтов | 13 | 12.05.2009 00:26 |
Запрос выпал из Яндекса | Kubert | Общие вопросы оптимизации | 3 | 14.10.2008 13:04 |
Левый запрос на выплату | Сергей | Ошибки при работе с системой | 7 | 23.11.2007 19:10 |
Часовой пояс GMT +3, время: 09:37.