Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Требуется помощь в оптимизации запроса / 4 сообщений из 4, страница 1 из 1
01.07.2015, 11:48:52
    #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
01.07.2015, 11:55:19
    #38996692
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется помощь в оптимизации запроса
У тебя выполняется сортировка по выражению, а не по совокупности полей, входящих в индекс. Индекс тут вообще не при делах.
Хочешь оптимизировать - введи дополнительное поле, в которое заноси предрасчитанное соотношение, индексируй его и используй при сортировке.
...
Рейтинг: 0 / 0
01.07.2015, 13:59:59
    #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
02.07.2015, 11:17:49
    #38997586
okuznetsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется помощь в оптимизации запроса
Спасибо! Благодарен за помощь. Всё получилось.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Требуется помощь в оптимизации запроса / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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