Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Вырос объем базы значительно. Возможно ли как то оптимизировать запрос ? Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 14:27 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Индекс по (nomer, mes). Других вариантов не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 15:13 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
AkinaИндекс по (nomer, mes). Других вариантов не вижу. не все поля в select входят в аггрегаты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 15:26 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
ScareCrow , не понял фразы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 15:36 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
If the ONLY_FULL_GROUP_BY SQL mode is enabled, an error occurs: If ONLY_FULL_GROUP_BY is not enabled, the query is processed by treating all rows as a single group, but the value selected for each named column is nondeterministic. The server is free to select the value from any row: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 16:16 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 10:05 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
ScareCrow , если запрос выполняется (а поскольку автор хочет оптимизации - то выполняется) - либо у автора сравнительно старая версия, либо ONLY_FULL_GROUP_BY отключено. Это как бы очевидно. Exec1 , лучше показывайте SHOW CREATE TABLE, гораздо нагляднее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 11:05 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Ну и, само собой, EXPLAIN запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 11:05 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 12:35 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
# cat my.cnf | grep sql_mode # Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 12:49 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Exec1 Код: sql 1. 2. Ну вот зачем тебе ДВА одинаковых индекса? Exec1 Код: sql 1. 2. При наличии первого второй практически теряет смысл. В общем, можешь эти два индекса - уникальный по id и отдельный по nomer безболезненно удалить. Далее... Exec1 Код: sql 1. Ты отдаёшь себе отчёт, что если одному nomer соответствуют несколько различных mes, то будет выведен случайный из них? Ещё далее... У тебя выполняется группировка по полю, потенциально способному быть NULL. Это - правильно? И тебе для таких записей тоже требуется количество? Если хотя бы один раз "нет" - замени COUNT(*) на COUNT(nomer). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 13:16 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Удаляем: UNIQUE KEY `id` (`id`), KEY `nomer` (`nomer`) >> Ты отдаёшь себе отчёт, что если одному nomer соответствуют несколько различных mes, то будет выведен случайный из них? Да, нужно просто для наглядности, при необходимости разворачивается все сообщения по коду. >> У тебя выполняется группировка по полю, потенциально способному быть NULL. Это - правильно? По идее оно не должно быть NULL. Если NULL то это скорее скрытая ошибка. >> И тебе для таких записей тоже требуется количество? Нет. Количество только для номеров. >> Если хотя бы один раз "нет" - замени COUNT(*) на COUNT(nomer). Да. По сути нужен только подсчет по nomer Сейчас попробую .. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 13:44 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. Время выполнения (повторно, не знаю берет он из кеша его или нет) запроса 6 сек. Стало лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 14:10 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Как возможно уменьшиь "Copying to tmp table" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 14:20 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Exec1Как возможно уменьшиь "Copying to tmp table"Перепиши, скажем, на коррелированный подзапрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 14:45 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Добавил рам диск. Запустил первоначальный запрос. (5.65 sec) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Запустил "коррелированный подзапрос" (7 min 31.77 sec) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 15:21 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Ай сорри, первый запрос тот что (5.65 sec) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Получается рам диск не помог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 15:28 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Exec1SELECT `mes`, `nomer`, COUNT(nomer) AS cnt FROM `alog` GROUP BY `nomer` ORDER BY `cnt` DESC; я так понимаю, ~2 ляма строк мы сначала посчитали, а потом ОПТОМ положили в память, потому что их надо ОТСОРТИРОВАТЬ прикольно... без ORDER BY же за 0.5сек отрабатывает? агрегация вам тут нужна, не иначе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 18:54 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
а, ну да автор Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 18:55 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
>> агрегация вам тут нужна, не иначе Так COUNT(nomer) - функция агрегации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2018, 08:10 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
>> без ORDER BY же за 0.5сек отрабатывает? Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2018, 09:51 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
создал такую же таблицу, нагенерил данных. Ваш запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Может стоить добавить аппаратных мощей. Всё-таки они дешевле, чем труд программистов.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2018, 14:05 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Exec1>> агрегация вам тут нужна, не иначе Так COUNT(nomer) - функция агрегации. не эта )) а в таблицу скидываете свои обработанные и посчитанные данные раз в минуту и уже с неё берёте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2018, 14:24 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Exec1>> без ORDER BY же за 0.5сек отрабатывает? Код: sql 1. 2. 3. а без group by ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2018, 14:25 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
>> Дормедонт Евлампиевич Очень интересный результат. Я так понимаю надо смотреть на : 87 rows in set (0.59 sec) ? Такое время смогу получить если: - отключу запросы на добавление новых записей, - выполню первый раз этот запрос, получу время около 6 сек - после этого выполню второй раз запрос (который по сути возьмет данные из кеша, скорее всего ) По мощностям, к сожалению, что есть. Потому остается только что то придумывать. >> а без group by ? Код: sql 1. 2. 3. На текущий момент я отключил рам диск, так как предыдущие результаты с рам диском не дали заметного прироста. На всякий случай контрольный: Код: sql 1. 2. 3. Ну да, что с рам диском, что нет. Рам диск прописывал в конфиг: tmpdir=/tmp/mysql/ И перезагружал. Перед этим: # mount -t tmpfs -o size=1024M tmpfs /tmp/mysql/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2018, 15:00 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39639625&tid=1829871]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 382ms |

| 0 / 0 |
