Помогите оптимизировать запрос MySql

Vanila
На сайте с 26.10.2005
Offline
105
622

Господа программисты, помогите, есть запрос который делает случайную выборку 5 товаров из категории:

SELECT i.id, i.category, i.vendor, i.name, i.low_price, p.parent, p.picture

FROM item i

LEFT JOIN picture p ON p.parent = i.id

WHERE i.cat_items = '90566'

ORDER BY RAND( )

LIMIT 5

обрабатывается более 9.2 сек, из-за него жестко тормозит сайт, как можно оптимизировать запрос?

fa2m
На сайте с 07.09.2011
Offline
23
#1
Vanila:

FROM item i

Что такое "item"? Индексы поставили на поле cat_items? Сколько записей в таблице i?

Встречи в Днепре /ru/forum/736064 (/ru/forum/736064) Беклинк за копейку. Удобный сервис анализа обратных ссылок. (http://backlink.page-weight.ru/)
TF-Studio
На сайте с 17.08.2010
Offline
334
#2

ORDER BY RAND( )

все тормозит, скорее всего

попробуйте сначала получить небольшой список ids потом из него уже выбрать.

Много записей всего?

с индексами всё гут?

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
edogs software
На сайте с 15.12.2005
Offline
775
#3
Vanila:
Господа программисты, помогите, есть запрос который делает случайную выборку 5 товаров из категории:
SELECT i.id, i.category, i.vendor, i.name, i.low_price, p.parent, p.picture
FROM item i
LEFT JOIN picture p ON p.parent = i.id
WHERE i.cat_items = '90566'
ORDER BY RAND( )
LIMIT 5
обрабатывается более 9.2 сек, из-за него жестко тормозит сайт, как можно оптимизировать запрос?

order by rand() заставляет базу данных полностью выбирать данных из обоих таблиц, да еще и по объединению. Избавляйтесь от него так или иначе, rand() самое зло.

Если уж совсем не придумать как избавиться, делайте rand выборку 5 id из item, а потом уже делайте по ним Ваш запрос (выкинув ранд и включив where id in (те 5 штук) ).

После этого вешайте индексы на parent, id, cat_items , при чем убедитесь что parent, id строго одного типа ( int (11) допустим оба ).

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
T3
На сайте с 16.02.2007
Offline
132
#4

Сократить число результирующих строк, которые сортируются рандомно...

Советую почитать http://habrahabr.ru/post/55864/

Рекомендую VPS за $5/месяц (https://m.do.co/c/e366f023194b). Готовый сервер разворачивается за 2 минуты.
rbbumfirst
На сайте с 03.04.2009
Offline
87
#5

или вот еще ORDER BY RAND

Web developer (http://rudov.com). разработка на Go, ReactJS, React Native
Vanila
На сайте с 26.10.2005
Offline
105
#6

спасибо всем, особено rbbumfirst, самы простой для меня вариант, время сократил до 0,10 сек

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий