|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
Добрый день. Есть достаточно частый запрос в mysql. Его время работы около 120мс. Это много select distinct `master_id` from (select * from `Master_hist_zakaz` where `id` in ( select max(`id`) as id from `Master_hist_zakaz` where `zakaz_id` in (select `id` from `All_Zakaz` where `date`>='2020-03-21 00:00:00' and `date`<='2020-04-03 23:59:59' and `type_id`='9') group by `zakaz_id`,`master_id`)) t1 where t1.`status_id`=6 or ('9' in (17,18,20,26,58) and t1.`status_id`=16) explain 1 row=67103 Using where; Using temporary 3 SUBQUERY row 67103 Using temporary; Using filesort 3 SUBQUERY All_Zakaz тут всё ок Как можно увеличить его скорость? Проблема в том, что в Master_hist_zakaz много записей, а в запросе он не ограничивается, ничем кроме id из All_Zakaz . index в Master_hist_zakaz по zakaz_id есть. Может надо связку индекса между All_Zakaz и Master_hist_zakaz сделать? Помогает это? Один ко многим например. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 12:36 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
shtrihs, Версия MySQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 12:42 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
5.7.21 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 12:44 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
Если форматнуть запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
то сходу бросается в глаза странное условие '9' in (17,18,20,26,58) . А так - в принципе аккуратненько преобразовываем WHERE .. IN в соотв. JOIN. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 13:02 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
Akina то сходу бросается в глаза странное условие '9' in (17,18,20,26,58) . Ну это хитрое условие, оно ни как не влияет на скорость запроса.[/quot] Akina А так - в принципе аккуратненько преобразовываем WHERE .. IN в соотв. JOIN. Я join последнее время сколько не пробовал раз делать, всё равно скорость одинаковая или даже хуже. Правда этот запрос не пробовал, но думаю результат +-5мс. Вроде бы join не сильно увеличивает скорость, по сравнению с WHERE IN. Или я не прав? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 14:08 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
Akina, Код: sql 1.
Вот это самый долгий подзапрос, он занимает больше всего времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 14:11 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
Давайте начнём тогда с публикации DDL этих таблиц и статистики по их наполнению в разрезе условий отбора. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 14:14 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
Akina, Код: sql 1. 2. 3. 4. 5. 6.
Вот подзапрос с join. Результат один в один по скорости ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 14:17 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
Akina Давайте начнём тогда с публикации DDL этих таблиц и статистики по их наполнению в разрезе условий отбора. Никогда это не делал. Подскажите, как это вывести правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 14:21 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
Akina, Код: 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.
Я так понимаю, это нужно? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 14:31 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
Создайте индекс All_Zakaz (type_id, `date`, id) . Заодно объясните, какого лешего поле type_id , судя по тексту запроса - числовое, имеет тип varchar(100) . ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 14:38 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
Akina Заодно объясните, какого лешего поле type_id , судя по тексту запроса - числовое, имеет тип varchar(100) . ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 15:13 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
Akina Создайте индекс All_Zakaz (type_id, `date`, id) . `date`, id - индексы есть. А зачем ещё и type_id? Если создать почти на все поля индексы - это разве правильно? Akina Заодно объясните, какого лешего поле type_id , судя по тексту запроса - числовое, имеет тип varchar(100) . Это сильно увеличивает нагрузку? Увеличивает время выполнения скриптов? Или это просто не правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 15:54 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
miksoft Да и остальные %id Когда создавал таблицу, не был уверен, что хватит размера поля int для этих полей ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 15:56 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
Преобразование в int, помогло увеличить скорость скрипта в три раза. Сейчас время выполнения скрипта 37мс. Но конечно , хотелось бы ещё увеличить ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 16:21 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
shtrihs miksoft Да и остальные %id Когда создавал таблицу, не был уверен, что хватит размера поля int для этих полей В крайнем случае можно было бы на bigint перейти, но не на строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 16:52 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
miksoft shtrihs пропущено... Когда создавал таблицу, не был уверен, что хватит размера поля int для этих полей В крайнем случае можно было бы на bigint перейти, но не на строки. Размер таблиц около 30 тыщ записей ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 17:06 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
shtrihs Akina Создайте индекс All_Zakaz (type_id, `date`, id) . `date`, id - индексы есть. А зачем ещё и type_id? Если создать почти на все поля индексы - это разве правильно? И индексы на отдельные поля - это совсем не то же самое, что один индекс на несколько полей. Тоже предлагают создать индекс All_Zakaz (type_id, `date`, id) либо All_Zakaz (type_id, `date`) - не помню с какой версии MySQL умеет читать первичный ключ из индекса как данные. После создания индекса имеет смысл сделать OPTIMIZE TABLE для всех таблиц в запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 17:07 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
[quot miksoft#22111149] shtrihs пропущено... Тоже предлагают создать индекс All_Zakaz (type_id, `date`, id) либо All_Zakaz (type_id, `date`) - не помню с какой версии MySQL умеет читать первичный ключ из индекса как данные. После создания индекса имеет смысл сделать OPTIMIZE TABLE для всех таблиц в запросе. То есть можно хоть на большинство полей поставить индекс? Но ведь вроде бы , количество индексов увеличивает время insert. А Primary Key ведь заменяет индекс? Или надо Promary key+index делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 19:55 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
По-моему, Вы не понимаете, что Akina Создайте индекс All_Zakaz (type_id, `date`, id) . ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 20:07 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
shtrihs Но ведь вроде бы , количество индексов увеличивает время insert. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 20:32 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
miksoft, то есть, сам запрос оптимизировать нельзя больше? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 22:11 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
shtrihs miksoft, то есть, сам запрос оптимизировать нельзя больше? Вы попробовали вариант с индексом? Еще можно убрать один внешний уровень вложенности. Быстрее, может, и не станет, но хоть читабельность увеличится. SELECT * лучше заменить только на необходимые поля. DISTINCT точно нужен? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2020, 23:18 |
|
Как можно усовершенствовать запрос?
|
|||
---|---|---|---|
#18+
А замена условия отбора по дате-времени на отбор по дате может дать существенный выигрыш? С добавлением соответствующего поля типа date, конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2020, 09:16 |
|
|
start [/forum/topic.php?fid=47&tid=1828658]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 295ms |
total: | 539ms |
0 / 0 |