Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите оптимизировать запрос.
|
|||
|---|---|---|---|
|
#18+
Добрый день. Помогите оптимизировать запрос. Сам запрос очень большой поэтому напишу так сказать его идею (макет или план запроса, не знаю как обозвать) :) Вот скажем пример запроса. Из таблицы <ПЛАТЕЛЬЩИКИ> мы выбираем последний предоставленный документ по плательщику из которого берем долг плательщика. У каждого плательщика может дата предоставления документа отличаться. (недавно данный вопрос мне подсказали тут ) Из таблицы Б которую мы присоединяем LEFT JOIN-ом выбираем сумму платежей по данному плательщику. Но сумму надо суммировать от даты последнего документа. В итоге нам нужно получить должен плательщик или нет, это сумма долга - сумма платежей взятая от даты предоставления последнего документа Код: 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. Как я понимаю проблема то в том что изначально мы выбрали последний документ взяли долг из него, а когда начинаем слева присоединять платежи, то по каждому плательщику мы опять выбираем последний документ чтоб узнать его дату и от него считать полученные платежи. Подскажите как можно ускорить выполнение запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2015, 07:50 |
|
||
|
Помогите оптимизировать запрос.
|
|||
|---|---|---|---|
|
#18+
alc0g0l1c, можно заюзать оконные функции. ты бы лучше вместо макета запроса привел бы макет тестовых данных и желаемый результат на них. дело бы с помощью пошло быстрее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2015, 09:12 |
|
||
|
Помогите оптимизировать запрос.
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, хорошо, так сказать тестовые данные... Таблица с Документами (точнее с id на таблицу с долгами по документу) user_idupdate_yearupdate_monthDoc_id720143172014627201412372015341120153511201566182015371920153819201569212014310212014911 Таблица с документами (долг по документам) Doc_idDolgSum15122223452434556546123753458539345108711344 А так же есть таблица с платежами Plat_iduser_idData_platplatez172015-02-17117272015-03-22274372015-03-3187472015-04-172475112015-06-151006112015-07-112007182015-01-2525008182015-03-1425009192015-04-1630010192015-06-1740011212015-03-1130012212015-05-21400 В итоге получаем следующее выбираем последний документ (с максимальной датой), с нему с лева подтягиваем долг по документу, и остается так же с лева подтянуть сумму платежей начиная с даты после получения последнего документа. Должна получится следующая таблица user_idupdate_yearupdate_monthDoc_idDolgSum(сумма платежей) platez7201534345247112015661232001820153753450192015693450212014911344700 Так же кроме этих таблиц к первой left join-ом добавляется несколько таблиц с адресами плательщиков, с телефонами и т.д. но они на скорость выборки не влияют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2015, 10:02 |
|
||
|
Помогите оптимизировать запрос.
|
|||
|---|---|---|---|
|
#18+
alc0g0l1c, Добрый день. Как-то так Код: 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. P.S.: Желательно всё же данные предоставлять не в виде табличек, а в виде sql команд создания таблиц, чтобы люди не тратили время на подготовку данных для запроса. Например, [create | declare global temporary] doc1 (...); insert into doc1 values (...), ..., (...); ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2015, 11:37 |
|
||
|
Помогите оптимизировать запрос.
|
|||
|---|---|---|---|
|
#18+
Mark Barinsteinalc0g0l1c, Добрый день. Как-то так Код: 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. P.S.: Желательно всё же данные предоставлять не в виде табличек, а в виде sql команд создания таблиц, чтобы люди не тратили время на подготовку данных для запроса. Например, [create | declare global temporary] doc1 (...); insert into doc1 values (...), ..., (...); ... Спасибо огромное. Работает, я даже удивился как быстро выбирается))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2015, 11:50 |
|
||
|
Помогите оптимизировать запрос.
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, а в вашем варианте, можно как нибудь обойтись без rownumber(), просто надо этот запрос еще и на cache перенести,а там функции rownumber() нету, не подскажите как можно без нее обойтись! P.S.: на db2 запрос работает замечательно, большое спасибо! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2015, 16:22 |
|
||
|
Помогите оптимизировать запрос.
|
|||
|---|---|---|---|
|
#18+
alc0g0l1cа в вашем варианте, можно как нибудь обойтись без rownumber(), просто надо этот запрос еще и на cache перенести,а там функции rownumber() нету, не подскажите как можно без нее обойтись! Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2015, 16:49 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=38966138&tid=1600800]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
65ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 161ms |

| 0 / 0 |
