Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
Привет ребят. Такая проблема. Есть запрос, который агрегирует данные из 10 таблиц, в итоге он выполняется 95 секунд. Вот сам запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Можно ли его как-то оптимизировать? Я уже все перепробовал, ставил индексы, пробовал переписывать его, но все тщетно. Мне пришлось временно удалить JOIN с таблицей mark_link, в итоге запрос стал выполняться примерно за 250 мс. Помогите пожалуйста, уже не знаю что делать =( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 16:15 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
MrApson, вы забыли explain показать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 16:51 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
MelkijMrApson, вы забыли explain показать. С EXPLAIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 17:04 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
MrApson, скорее всего барахлит анализатор 1. сделайте OPTIMIZE таблиц 2. какая скорость если оставить только ML ? 3. перепишите таблицу чтоб первые 6-7 джоинтов были в отдельном сабселекте а потом джоин на ML 4. сделайте ЛИМИТ 0,30 в самом начале ОТДЕЛЬНО от всего остального а потом навешивайте все остальное (Експлейн похоже нормальный, но движок где-то тормозит. варианты (3) и (4) -- фактически некая подсказак движку сделать правильно не только на екплейне но и в реальном прогоне ) () ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 18:46 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
Сейчас уеду на час-полтора, приеду и распишу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 18:50 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
Я бы каждую группу (company + data_link + data) убрал в отдельный подзапрос, чем избавился от DISTINCT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 07:48 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
MrApsonПривет ребят. Такая проблема. Есть запрос, который агрегирует данные из 10 таблиц, в итоге он выполняется 95 секунд. Вот сам запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Можно ли его как-то оптимизировать? Я уже все перепробовал, ставил индексы, пробовал переписывать его, но все тщетно. Мне пришлось временно удалить JOIN с таблицей mark_link, в итоге запрос стал выполняться примерно за 250 мс. Помогите пожалуйста, уже не знаю что делать =(. Нет, его нельзя оптимизировать, у него нет SARG-ов вообще (company.deleted = 0 не в счёт, неселективный). обрабатывается всё. группируется все. Сортируется всё. Затем -- БЕРЁТСЯ 30 ЗАПИСЕЙ! Максимум что тут можно оптимизировать, это JOIN-ы, на каждый надо посоздавать индексы в дочерних (правых) таблицах. LEFT JOIN activity_link as al on company.id = al.company_id AND al.deleted = 0 -- на ( al.company_id, al.deleted ) LEFT JOIN activity on activity.id = al.activity_id -- на (activity_id) и так далее. Но, полагаю, что такие индексы уже есть, потому что это должны быть PK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 09:48 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
4. сделайте ЛИМИТ 0,30 в самом начале ОТДЕЛЬНО от всего остального а потом навешивайте все остальное Так зачем же LIMIT, можно просто выбрать нужные company_id, и сделать фильтр по ним в WHERE через IN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 09:51 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
MrApsonПривет ребят. Такая проблема. Есть запрос, который агрегирует данные из 10 таблиц, в итоге он выполняется 95 секунд. Вот сам запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Можно ли его как-то оптимизировать? Я уже все перепробовал, ставил индексы, пробовал переписывать его, но все тщетно. Мне пришлось временно удалить JOIN с таблицей mark_link, в итоге запрос стал выполняться примерно за 250 мс. Помогите пожалуйста, уже не знаю что делать =( Вообще, показательно идиотский запрос. Полагаю, что он ещё и неправильный, поскольку группируются параллельно с JOIN-иненые несколько отношений один-ко-многим, проблему как раз подтверждают DISTINCT-ы внутри группировок. МОжно, можно всю базу сджойнить, а потом DISTINC-том её сжать в одно уникальное значение, ну, будет работать 3 часа, -- не проблема :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 09:55 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
MasterZiv, И как теперь быть?) что делать с этим запросом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 10:03 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
MasterZivможно просто выбрать нужные company_id, ...так ЛИМИТ-ом же!... ...теже тестикулы, но еще и в гульфике WHERE ... IN (.....LIMIT 0,30)... ...я предлагаю сразу SELECT .... WHERE (select company.* -- список нужных полей ...... from company where WHERE company.deleted = 0 ORDER BY company.id DESC LIMIT 0, 30) c LEFT JOIN....... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 14:24 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
MrApsonчто делать с этим запросом? Верстай нечто вроде Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 15:03 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
И подумай заодно - нужен ли реально DISTINCT в GROUP_CONCAT при такой организации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 15:04 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
И да - подзапросы отирают записей больше, чем лимит в основном запросе, так что и в подзапросах залимитируй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 15:05 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
То бишь так? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 15:13 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
А сортировочку-то добавить? а то оно тебе залимитит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 16:17 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
Akina, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. И так каждый запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 16:21 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
Подзапрос* ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 16:21 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
Ну да... или тебе байтов жалко? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 20:56 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
В общем ошибку выдает #1054 - Неизвестный столбец 'c0.id' в 'on clause' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 13:54 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#18+
MrApsonошибку выдает #1054 - Неизвестный столбец 'c0.id' в 'on clause'Значит, где-то промарьяжился... проверь, что алиасы таблиц уникальны в пределах запроса и что все алиасы находятся в области их видимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 14:24 |
|
||
|
SQL запрос выполняется 90 секунд
|
|||
|---|---|---|---|
|
#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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. Запрос стал выполняться 0.007с. Спасибо огромное) Не думал, что джоины тоже надо лимитить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 15:13 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39505422&tid=1830472]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 158ms |

| 0 / 0 |
