11.07.2009, 17:53 | #1 |
Специалист
|
запрос в mysql
Есть запрос:
PHP код:
Вроде всё просто, но я не гуру в mysql запросах и оказалось что запрос грузит сервер mysql. Как оптимизировать? |
11.07.2009, 19:11 | #3 |
Специалист
Регистрация: 16.03.2008
Сообщений: 256
Вес репутации: 208
|
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 - это зло в случае большого количества записей |
11.07.2009, 20:41 | #5 | ||
Специалист
Регистрация: 15.07.2007
Адрес: Беларусь, но скоро будет РФ :)
Сообщений: 232
Вес репутации: 217
|
Цитата:
Тогда заменить на Цитата:
Добавлено через 2 минуты Если именно LIKE, то только связанную таблицу со всевозможными вариантами написания $catalog. Тогда можно будет вложенным запросом убрать LIKE.
__________________
Каб любить Беларусь нашу милую... требо в росных краях побывать... Последний раз редактировалось apple; 11.07.2009 в 20:41. Причина: Добавлено сообщение |
||
11.07.2009, 21:48 | #6 |
Специалист
|
Правильно, выборка в зависимости от каталога.
Обдумываю как переделать базу и впредь на такое не натыкаться. А rand() всё же даёт не даёт случайное число, а случайным образом строки с таблицы. Иначе как при таком запросе всё время выдаются разные записи? :-) |
11.07.2009, 23:03 | #7 |
Специалист
Регистрация: 15.07.2007
Адрес: Беларусь, но скоро будет РФ :)
Сообщений: 232
Вес репутации: 217
|
Ну раз простая выборка, то сделай индексированными поля, по которым она идет и замени LIKE на = как я написал.
__________________
Каб любить Беларусь нашу милую... требо в росных краях побывать... |
12.07.2009, 00:19 | #8 | |
Эксперт
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 254
|
Zergalius,
Цитата:
|
|
12.07.2009, 00:43 | #9 | |
Э̀҉к͜с͜͏п̧́е͟р̶т̧̕
Регистрация: 11.04.2008
Адрес: Маськва
Сообщений: 1,996
Вес репутации: 323
|
Цитата:
Это зависит от соотношения жесткости ограничений по загрузке и объему. Так, например, я на своем проекте вынужден хранить данные в минимальном объеме, жертвуя быстродействием, т.к. их быстро становится слишком дохрена и важна экономия каждого байта в кортеже.
__________________
|
|
12.07.2009, 00:47 | #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, время: 21:05.