powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Требуется помощь в оптимизации запроса
4 сообщений из 4, страница 1 из 1
Требуется помощь в оптимизации запроса
    #38996677
okuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Составной индекс имеется: votes_summ_votes_count ON game(votes_summ,votes_count), но как видно из Explain - не используется. Из мануала вычитал, что если Сортировка ORDER BY делается по нескольким ключам, то это как раз тот один из некоторых случаев, когда MySQL не может использовать индексы, чтобы выполнить ORDER BY.

Можно ли как-то оптимизировать данный запрос?

Код: sql
1.
2.
3.
4.
SELECT id,catid,title,object,description,image,votes_summ,votes_count,views,favorites,date,is_uniq 
FROM `game` 
ORDER BY votes_summ/votes_count 
DESC LIMIT 28



Explain и SHOW INDEX FROM game:
...
Рейтинг: 0 / 0
Требуется помощь в оптимизации запроса
    #38996692
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя выполняется сортировка по выражению, а не по совокупности полей, входящих в индекс. Индекс тут вообще не при делах.
Хочешь оптимизировать - введи дополнительное поле, в которое заноси предрасчитанное соотношение, индексируй его и используй при сортировке.
...
Рейтинг: 0 / 0
Требуется помощь в оптимизации запроса
    #38996883
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
okuznetsovМожно ли как-то оптимизировать данный запрос?

Код: sql
1.
2.
3.
4.
SELECT id,catid,title,object,description,image,votes_summ,votes_count,views,favorites,date,is_uniq 
FROM `game` 
ORDER BY votes_summ/votes_count 
DESC LIMIT 28





Нет, нельзя.
WHERE нет.
Есть только ORDER BY. Но он по выражению. Индексов на выражение в MySQL вроде пока ещё нет.

Всё, других поводов для оптимизации нет.
Да, если таблица очень большая, запрос фактически работать не будет.

Есть вариант с рефакторингом БД и запроса -- нужно добавить вычисляемое поле specific_vote_summ = votes_summ/votes_count
(поле нужно при этом вычислять самому, например, в триггере или процедуре), создать на него индекс, и в запросе
использовать сортировку именно по этому полю.

Тогда запрос будет работать O(1).
...
Рейтинг: 0 / 0
Требуется помощь в оптимизации запроса
    #38997586
okuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Благодарен за помощь. Всё получилось.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Требуется помощь в оптимизации запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]