|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
MySQL v8. Нужно выбрать контрагентов с имеющимся телефоном и их долги из 2х разных таблиц одинаковой структуры (долг может быть как в одной из таблиц, так и в двух сразу) за самый последний период. Такой запрос делает это ну ооооочень медленно: Код: sql 1. 2. 3. 4. 5. 6. 7.
Можно его ускорить? Индексы по всем полям имеются. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 11:33 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
EXPLAIN такой выбирается 2721 запись из 36931 контрагентов. data_sgrc имеет 34712 записей за период, data_sgrc_nu - 2982. Время выборки чуть меньше минуты. Намного более сложные запросы выполняются за несколько секунд, к примеру. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 11:56 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
Уже переписал и так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
все равно время выполнения = 30 сек. Замерил, отдельно запросы: t3 = 0.8 сек t1 = 0.4 сек t2 = 0.1 сек А итоговый все равно 30 сек. Что не так-то, что я упускаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 12:31 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
А если Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 16:58 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
Немного офтопа от чайника. Смысл запроса имхо - получить список должников с телефонами, чтобы позвонить им и высказать свое "фе" (ну, или продать список коллекторам). Зачем тут контрагенты с телефоном, но без долгов - не понятно. "Дорогой контрагент, звоним, чтобы сказать спасибо, что вы нам ничего не должны"!? Можно ли оптимизировать запрос, если в выборке оставить только должников (ну, то есть как-то избавиться от левых джойнов)? Типа: SELECT контрагент, SUM(долг1), SUM(долг2) FROM (SELECT контрагент, долг AS долг1 , 0 AS долг2 FROM t3 JOIN t1 USING(контрагент) UNION SELECT контрагент, 0, долг FROM t3 JOIN t2 USING(контрагент)) GROUP контрагент ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 17:48 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
Akina А если ... ? Увы, то же самое - около 30 сек. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 18:37 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
paver Можно ли оптимизировать запрос, если в выборке оставить только должников (ну, то есть как-то избавиться от левых джойнов)? Задача выбрать всех контрагентов с телефоном, присовокупив к ним их долги, даже если его нет (долг будет = 0). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 18:42 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
Тогда остаётся Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 18:50 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
Akina, ругается: > 1248 - Every derived table must have its own alias ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 19:05 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
LiYing Akina, ругается: > 1248 - Every derived table must have its own alias ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 21:21 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
Akina Тогда остаётся Не, и это 28 сек... Вот прямо интересно, как складывается это время из трех подзапросов, которые по отдельности выполняются совокупно за чуть более секунды? Может еще какие индексы создать? Но какие? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 22:45 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
LiYing Не, и это 28 сек... Вот прямо интересно, как складывается это время из трех подзапросов, которые по отдельности выполняются совокупно за чуть более секунды? Может еще какие индексы создать? Но какие? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 23:16 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
LiYing Вот прямо интересно, как складывается это время из трех подзапросов, которые по отдельности выполняются совокупно за чуть более секунды? Реляционное произведение трех выборок (2721 запись, 34712 записей, 2982) дает в результате примерно 300 лярдов кортежей. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 06:06 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
LiYing, можно попробовать еще вариант: отдельно получить должников из т1 и т2 простыми джойнами, третьим запросом получить честных контрагентов через NOT EXIST, собрать унионом в один запрос и сгруппировать. Ну, т.е. оптимизировать нужно будет именно третий запрос. Отдельно замерить запросы после объединения и окончательный после группировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 06:17 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
LiYing Уже переписал и так: А если так? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Добавляется группировка, но по произведению только 2 таблиц (примерно 3К на 40К) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 07:23 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
paver А если так? ... Добавляется группировка, но по произведению только 2 таблиц (примерно 3К на 40К) Йес, 0.3 сек! Только чуть поправил группировку: сделал по id контрагента, т.к. ФИО+телефон не уникальны, из-за этого выбиралось чуть меньше записей. Супер, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 08:58 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
Тогда что-то неладное у Вас в системе... оперативки мало, что ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 11:12 |
|
Можно ли оптимизировать запрос?
|
|||
---|---|---|---|
#18+
Akina Тогда что-то неладное у Вас в системе... оперативки мало, что ли? Возможно что-то в конфиге надо поправить, он практически дефолтный. На что посмотреть, подскажите. А так на сервере ОЗУ 32 гига, из них свободно около 20, MySQL отжирает примерно 1 (в простое или под легкой нагрузкой). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2020, 12:37 |
|
|
start [/forum/topic.php?fid=47&msg=40031354&tid=1828262]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
154ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 272ms |
0 / 0 |