оптимизация классического запроса

Лысый

Новичок
оптимизация классического запроса

в слоу-логах нашёл

SELECT id, title, date, alt_name FROM dle_post WHERE approve='1' ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT 0,10;

смысл - из одобреных новостей сортируются все по критерям самого высого рейтинга, затем критерию комментируемости, числа просмотров и наконец даты публикации.

ситуация классическая, т.к. все поля кроме даты - интовские, выборка по константе и затем сортировка с ограницением.
вроде всё должно быть просто - однако запрос в слоулоге
вопрос, как оптимизировать? пробовал построить индексы на всех сравниемых полях, не помогло.
эксплеин пишет - Using where; Using filesort
т.е. основные тормоза как я понимаю из-за сортировки

как быть? есть идеи?

спасибо.
 

440hz

php.ru
в запросе тащишь только id, а потом при показе уже те поля какие нужны отдельным селектом.

будет свистеть.
 

Socrat

Новичок
approve='1'
если интеджер все поля то почему '1'?

убери кавычки - и напиши что получилось - достаточно интересно :)
 

algo

To the stars!
SELECT id, title, date, alt_name FROM dle_post WHERE approve='1' ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT 0,10;

Попробуй alter table dle_post add index (approve, rating, comm_num, news_read, date)
 

voituk

прозревший
Избавляйся от ORDER BY ... DESC

Любая обратная сортировка создает временную таблицу явную или неявную.

Также есдт в slow-log-е только единичные подобные записи - забей - скорее всего лаги сервера.
 

Vallar_ultra

Любитель выпить :)
2Лысый
Пожалуй только индексами.....

Я как посмотрю ты движок dle пытаешься оптимайзить, я правильно понял?
 

Лысый

Новичок
Vallar_ultra
да ты прав, его, корявого
индексы я описал - пробовал разные варианты, комбинировал поля из сортировки и из выборки

Socrat
потому что этот движок дибилы писали. исправил - никакой разницы


algo
это просто в точку! огромное спасибо.
наверное самый ценный совет за последние неск мес на форуме.
вообще летает
время вместо 2-3 секунд - 0-3 сотых ;)))


440hz
хорошая идея, но не успел проверить;)
 
Сверху