powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос пожалуйста
14 сообщений из 39, страница 2 из 2
Помогите оптимизировать запрос пожалуйста
    #38627228
webslon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chabapokderived2 с 10 записями это у вас таблица а. А для таблицы b это условие выполняется без индексов. Сколько записей у вас в b?

Таблица b это user. Условие дается для id_user. id_user первичный ключ, а значит и индекс существует для него.

В таблице b - 10000 записей
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос пожалуйста
    #38627231
webslon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftwebslonНо нужно именно 10 всегда выводить.Тогда уточняйте задачу. Если какие-то из пользователей имеют несколько высокопопулярных запросов и несколько же ответов, то их как считать? за одного или за несколько?
За одного, чтобы не повторялись.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос пожалуйста
    #38627235
webslon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, значит мой запрос ещё и неверен. Нужно order by сделать.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос пожалуйста
    #38627237
webslon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тьфу, group by хотел сказать
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос пожалуйста
    #38627238
webslon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только я не знаю как применить group by по id_user в самом объединении перед limit 10, подскажите пожалуйста
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос пожалуйста
    #38627251
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да применить-то несложно:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SELECT b.login 
FROM
(SELECT id_user, MAX(rating) AS max_rating
 FROM 
 ((SELECT id_user, MAX(question_rating) AS rating
 FROM question 
 WHERE creation_date_question >= '2013-04-15 00:00:00'
 GROUP BY id_user
 ORDER BY rating DESC 
 LIMIT 10)
 UNION ALL
 (SELECT id_user, MAX(answer_rating) AS rating
 FROM answer 
 WHERE creation_date_answer >= '2013-04-15 00:00:00'
 GROUP BY id_user
 ORDER BY rating DESC 
 LIMIT 10)) t
 GROUP BY id_user
 ORDER BY max_rating DESC 
 LIMIT 10
) AS a
JOIN user AS b ON a.id_user = b.id_user

Но вот быстродействия тут ждать не приходится...
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос пожалуйста
    #38627265
webslon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftДа применить-то несложно:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SELECT b.login 
FROM
(SELECT id_user, MAX(rating) AS max_rating
 FROM 
 ((SELECT id_user, MAX(question_rating) AS rating
 FROM question 
 WHERE creation_date_question >= '2013-04-15 00:00:00'
 GROUP BY id_user
 ORDER BY rating DESC 
 LIMIT 10)
 UNION ALL
 (SELECT id_user, MAX(answer_rating) AS rating
 FROM answer 
 WHERE creation_date_answer >= '2013-04-15 00:00:00'
 GROUP BY id_user
 ORDER BY rating DESC 
 LIMIT 10)) t
 GROUP BY id_user
 ORDER BY max_rating DESC 
 LIMIT 10
) AS a
JOIN user AS b ON a.id_user = b.id_user

Но вот быстродействия тут ждать не приходится...

Спасибо большое. Отрабатывает за 1.14 сек. в худшем случае. Т.е. при миллионе записей. Учитывая что это будет ещё и в кроне работать, всё ок.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос пожалуйста
    #38627276
webslon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftДа применить-то несложно:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SELECT b.login 
FROM
(SELECT id_user, MAX(rating) AS max_rating
 FROM 
 ((SELECT id_user, MAX(question_rating) AS rating
 FROM question 
 WHERE creation_date_question >= '2013-04-15 00:00:00'
 GROUP BY id_user
 ORDER BY rating DESC 
 LIMIT 10)
 UNION ALL
 (SELECT id_user, MAX(answer_rating) AS rating
 FROM answer 
 WHERE creation_date_answer >= '2013-04-15 00:00:00'
 GROUP BY id_user
 ORDER BY rating DESC 
 LIMIT 10)) t
 GROUP BY id_user
 ORDER BY max_rating DESC 
 LIMIT 10
) AS a
JOIN user AS b ON a.id_user = b.id_user

Но вот быстродействия тут ждать не приходится...

А зачем вы используете агрегатную функцию Max, если потом сортируете по рейтингу всё равно. Я удалил везде Max и вроде норм работает.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос пожалуйста
    #38627277
webslon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё скажите пожалуйста, почему после использование покрывающего индекса количество строк для перебора сократилось ровно в 2 раза. Почему имеено половина?
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос пожалуйста
    #38627282
webslon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё узнал странную особенность благодаря вашему запросу. Max ведь возвращает одно значение. Но если добавить Group by, то все значения.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос пожалуйста
    #38627284
webslon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Под значениями я имею в виду записи, корявый лексикон.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос пожалуйста
    #38627317
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftДа применить-то несложно:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SELECT b.login 
FROM
(SELECT id_user, MAX(rating) AS max_rating
 FROM 
 ((SELECT id_user, MAX(question_rating) AS rating
 FROM question 
 WHERE creation_date_question >= '2013-04-15 00:00:00'
 GROUP BY id_user
 ORDER BY rating DESC 
 LIMIT 10)
 UNION ALL
 (SELECT id_user, MAX(answer_rating) AS rating
 FROM answer 
 WHERE creation_date_answer >= '2013-04-15 00:00:00'
 GROUP BY id_user
 ORDER BY rating DESC 
 LIMIT 10)) t
 GROUP BY id_user
 ORDER BY max_rating DESC 
 LIMIT 10
) AS a
JOIN user AS b ON a.id_user = b.id_user

Но вот быстродействия тут ждать не приходится...Интересно, какой индекс тут предпочтительней (что выберет сервер) ?
(User,Date,Rating) или (User,Rating,Date) ? :-)
Я бы предположил, что URD...
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос пожалуйста
    #38627369
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webslonудалил не таблицы, а индексы все для этих таблиц
...
id_user первичный ключ


эти две фразы - взаимоисключающие, первичный ключ - это тоже индекс. Именно поэтому я просил крейт таблы - чтобы не догадываться какие там у вас индексы.

webslonПозволит вам разве что другие атрибуты посмотреть.
А другие аттрибуты мне вообще не нужны и только мешают. Обычная практика - лишние колонки стереть, чтобы они перед глазами не маячили. Это даже не то чтоб обычная практика, а правила хорошего тона, можно сказать. Вы таблицы не привели, в результате потратили кучу времени, но все равно пришлось выяснить их структуру и индексы.

авторИнтересно, какой индекс тут предпочтительней (что выберет сервер) ?
Индекс выбирается тот, который дает меньше записей. При этом не учитывается что в кэше, а что нет.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос пожалуйста
    #38627538
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokавторИнтересно, какой индекс тут предпочтительней (что выберет сервер) ?
Индекс выбирается тот, который дает меньше записей. При этом не учитывается что в кэше, а что нет.как интересно...

Оказывается, индекс фильтрует таблицу...
Offtop. http://youtu.be/4BSPDnd98i4#t=11
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос пожалуйста
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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