|
|
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Прошу помощи: adp проект, Форма содержит ленточную подформу, источник записи - функция (записей порядка 28000 на сегодня). При загрузки формы проходит около 1 минуты, прежде же загрузятся данные. Декомпиляция, изменение источника записей, уменьшение сортировочных полей, до одного не решило мою проблему. Единственное, что помогло, это - отказаться от сортировки. Это не вариант, поскольку поле по которому идет сортировка отображает deadline, это вычисляемое поле в запросе DaysToEventEndNewSort. Можно ли как то увеличить скорость загрузки? Спасибо. Ниже запрос и план запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 14:31:12 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 14:31:25 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 14:34:04 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 14:34:31 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
1. Нафига те 28000 записей не клиенте? Микрософт очень толсто намекает, ограничивая 10 000 записей выборку в ADP. 2. Мой хрустальный шар треснул, при попытке заглянуть в dbo.fn_TEList_Init() и dbo.tTEList_SO. 3. Я так полагаю - это сильномохнатые вьюхи с кучей вычисляемых полей и соединений по этим полям... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 14:38:11 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
aleks222, спасибо , что посмотрели. Не скажу, что я асс, но я правда хочу разобраться: 1 - SELECT TOP - вроде ограничение 2 - не поняла совсем 3 - куча вычислений есть, но соединений по ним нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 14:44:33 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Я уже думаю формировать временную таблицу для решения моей проблемы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 14:55:50 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
TOP 100 PERCENT -- не ограничение, а подарок тем, кто строит запросы в графическом построителе вьюх. опубликуйте код dbo.fn_TEList_Init() и убедитесь во всей куче соединений воочию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 14:56:14 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
annetby1 - SELECT TOP - вроде ограничениеу тебя там топ 100%. Так себе ограничение...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 15:00:49 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Yasha123 , не сразу поняла , соединений - тьма, 12 таблиц, это правда. Я подумала о соединениях с вычисляемыми полями , сорри ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 15:01:37 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
1. top 100 %. Ога. 2. Эффективное написание запросов требует использования не вьюх, а таблиц. По минимуму. 3. Выход на "лишь бы щас работало": запихиваешь результат запроса БЕЗ сортировки во временную таблицу. Выбираешь из временной с сортировкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 15:09:20 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
после быстрого взгляда cross двух функций и потом попытка объединить результаты типа джоин. наверняка в построено в построителе запросов. без понимания того что таки надо получить в итоге. 1) нафиг выкинуть cross join ибо по всей видимости dbo.tTEList_SO отвечает за доступ , но к чему фиг поймёшь 2) а может таки посмотреть что есть в dbo.fn_TEList_Init() 3) нормально переписать условие where ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 15:10:06 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Ребята, всем огромное спасибо за отклики. что то совсем непонятные для меня вещи: убирала cross join из запроса, и по времени на 5 секунд дольше загружалась форма, 64 сек. и с TOP 100 PERCENT --играла, ставила 10. запрос на выполнение срабатывает за 23 сек., но при открытии формы в adp проекте и загрузки данных проходит 1 минута. Вот пришла к вам за помощью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 15:22:41 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Гигабайт Мегабайтович Килобайтов, dbo.tTEList_SO отвечал за сортировку (хранил сортировку пользователей для след Загрузки. Я убрала ее и оставила одно поле для сортировки и в одном порядке -по возрастанию). Подумалось, если Вы найдете причину так пусть уже и красиво будет с сортировкой :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 15:28:13 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
annetbyГигабайт Мегабайтович Килобайтов, dbo.tTEList_SO отвечал за сортировку (хранил сортировку пользователей для след Загрузки. Я убрала ее и оставила одно поле для сортировки и в одном порядке -по возрастанию). Подумалось, если Вы найдете причину так пусть уже и красиво будет с сортировкой :-) таки что-то у вас не то, в текущем виде dbo.tTEList_SO точно не отвечает за сортировку ибо вы сортируете по полю из dbo.fn_TEList_Init() CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END вы хоть понимаете что тут происходит и как ведет себя сортировка в данном случае?)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 15:36:40 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Гигабайт Мегабайтович КилобайтовannetbyГигабайт Мегабайтович Килобайтов, dbo.tTEList_SO отвечал за сортировку (хранил сортировку пользователей для след Загрузки. Я убрала ее и оставила одно поле для сортировки и в одном порядке -по возрастанию). Подумалось, если Вы найдете причину так пусть уже и красиво будет с сортировкой :-) таки что-то у вас не то, в текущем виде dbo.tTEList_SO точно не отвечает за сортировку ибо вы сортируете по полю из dbo.fn_TEList_Init() CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END вы хоть понимаете что тут происходит и как ведет себя сортировка в данном случае?)) а самый лучший вариант таки раскрыть функцию и препарировать исходные данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 15:37:41 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
annetbyи с TOP 100 PERCENT --играла, ставила 10. annetbyПодумалось, если Вы найдете причину так пусть уже и красиво будет с сортировкой :-) Причину мы установили: полное непонимание сути. Лечение: только самолечение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 15:41:15 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Гигабайт Мегабайтович Килобайтов, надеюсь, что хотя бы имею представление. было так: ORDER BY CASE WHEN B.DirCode = 1 THEN A.DirCode WHEN .... END, CASE WHEN B.DirCode = 2 THEN A.DirCode ... END DESC, Я убрала сортировку сложную и возможно не нужную - CROSS JOIN dbo.tTheoryExpandedList_SortOrder B Я правда хочу разобраться, что не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 15:47:06 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
для уточнения - текст данного запроса уходит с клиента или таки это всё на сервере? CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END вы тут приводите к типу varchar(сколько то ) а потом сортируете этот varchar , что происходит очень медленно. это при условии что "когда вы убрали сортировку результат приемлем". и таки хотелось бы посмотреть таки что было в сортировки до то, как вы её порезали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 16:03:28 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
annetby, Для начала вот так. И начнем разбираться по Вашим nested loops. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 16:11:27 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
annetby, Теперь сюда скриншотик следующего запроса. И далее мы Вам таки ткнем пальцем в некошерное место. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 16:15:41 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Гигабайт Мегабайтович КилобайтовCASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END вы тут приводите к типу varcharТип данного выражения - int. Потому что приоритет int выше, чем varchar. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 16:15:58 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
annetby, Хотя в принципе и так очевидно, что у Вас не хватает некластерных индексов на таблице [tTheoryEvents]. Ну или статистика по ним уже некошерная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 16:17:59 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
annetby, Показывайте актуальный план в формате sqlplan. И не картинкой, а файлом. Тот, который показан, не соответствует обсуждаемому запросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 16:26:05 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Гигабайт Мегабайтович Килобайтов, для уточнения - текст данного запроса уходит с клиента или таки это всё на сервере? пользователи работают с ade файлом, который находится локально на компе пользователя. CASE WHEN A.State = 'В работе' THEN CAST(A.DaysToEventEnd AS integer) ELSE '9999' END вы тут приводите к типу varchar(сколько то ) а потом сортируете этот varchar , что происходит очень медленно. это при условии что "когда вы убрали сортировку результат приемлем". в этом наверное намудрила, пользователю непонятно 9999, поэтому у меня 2 поля формируется одно int- сортирую по нему, а на экран в форме подтягиваеьтся другое поле с "--". В сортировке не нужен CAST. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 16:27:05 |
|
||
|
|

start [/forum/topic.php?fid=46&startmsg=39569019&tid=1690683]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
161ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 189ms |
| total: | 416ms |

| 0 / 0 |
