|
Запрос с вложенным запросом, где указаны дополнительные условия, работает медленнее | ☑ | ||
---|---|---|---|---|
0
slafor
28.03.20
✎
16:03
|
В общем-то, вопрос не очень существенный, но интересный. Чисто из темы "хочу все знать" )
Есть запрос, в котором есть вложенный запрос. Например, такой: ВЫБРАТЬ ОтчетОРозничныхПродажах.Ссылка КАК ОРП, ПриходныйКассовыйОрдер.Ссылка КАК ПКО ИЗ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Ссылка, СУММА(СуммаДокумента) КАК Сумма ИЗ Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер //ГДЕ Дата МЕЖДУ &НачалоПериода И &КонецПериода СГРУППИРОВАТЬ ПО Ссылка) КАК ПриходныйКассовыйОрдер ПО КОНЕЦПЕРИОДА(ОтчетОРозничныхПродажах.Дата, ДЕНЬ) = КОНЕЦПЕРИОДА(ПриходныйКассовыйОрдер.Дата, ДЕНЬ) И ОтчетОРозничныхПродажах.Организация = ПриходныйКассовыйОрдер.Организация И ОтчетОРозничныхПродажах.Контрагент = ПриходныйКассовыйОрдер.Контрагент ГДЕ ОтчетОРозничныхПродажах.Дата МЕЖДУ &НачалоПериода И &КонецПериода Так вот, если я раскомментирую условие во вложенном запросе (//ГДЕ Дата МЕЖДУ &НачалоПериода И &КонецПериода), то запрос будет выполняться дольше, чем без указания условия. Так и должно быть? P.S.: Этот запрос ищет ПКО, которые были созданы без указания документа-основания, т.е. вручную. Там еще в условии проверяется, что документ-основание не заполнен. |
|||
1
ale-sarin
28.03.20
✎
16:11
|
Проблема возможно в соединении с вложенным запросом
https://its.1c.ru/db/pubqlang#content:155:hdoc https://its.1c.ru/db/metod8dev#content:5842:hdoc https://its.1c.ru/db/v8std#content:655:hdoc |
|||
2
ДенисЧ
28.03.20
✎
16:40
|
D ghjabkth yt cvjnhtk&
|
|||
3
ДенисЧ
28.03.20
✎
16:40
|
В профилер не смотрел?
|
|||
4
Cyberhawk
28.03.20
✎
17:29
|
Это нарушение если и не стандарта разработки, то по крайней мере рекомендации. По умолчанию используй ВТ, т.е. вложенный вынеси в отдельный запрос пакета с созданием ВТ и уже в итоговом запросе соединяйся с ВТ.
|
|||
5
slafor
28.03.20
✎
18:59
|
(4) Да, я почитал о временных таблицах. Сам их раньше использовал, но только в готовых запросах, где надо было что-то изменить.
Придется весь запрос переписывать, там аж шесть соединений с вложенными запросами. Ну что ж, будет время - займусь ) (3) Для профайлера SQL нужны права администратора сервера? Если да, то труба - у меня их нет... |
|||
6
rsv
28.03.20
✎
19:15
|
(0) а сколько строк в таблице ПКО ?
|
|||
7
rudnitskij
28.03.20
✎
19:28
|
1) Много раз встречался с ситуациями, когда убирание условия из вложенного запроса ускоряло его выполнение на порядок, а иногда и два.
2) Если вас интересует только наличие/отсутствие документов - выбирайте запросом не ссылку, а другие реквизиты. Номер и дату, например. Выбирая ссылку, вы выбираете весь документ, все его данные. Из вашего PS я так понял, что они вам не нужны |
|||
8
ДенисЧ
28.03.20
✎
19:30
|
(7) "Выбирая ссылку, вы выбираете весь документ, все его данные"
https://www.youtube.com/watch?v=l_--ewb4YXg |
|||
9
slafor
28.03.20
✎
19:33
|
(6) нужны не все ПКО, а за определенный период. Других условий без данных Отчета о розничных продажах дать не могу, разве что только то, что документ-основание у него должен иметь тип "ДокументСсылка.ОтчетОРозничныхПродажах".
(7) 1). Ну да, я как раз с этим и столкнулся. 2). Все данные мне не нужны, мне нужна только ссылка (шутка :) ). Дело в том, что потом нужно иметь возможность обращаться к самому документу, например, открывать его, получать объект и т.д. |
|||
10
slafor
28.03.20
✎
19:36
|
(4) "Это нарушение если и не стандарта разработки, то по крайней мере рекомендации.".
Как вы думаете, если бы я использовал вложенный запрос в соединении на экзамене в 1С, меня бы с экзамена выгнали или просто поставили бы -1? :) |
|||
11
rudnitskij
28.03.20
✎
19:37
|
(9) по номеру и дате вполне можно получить документ
|
|||
12
rudnitskij
28.03.20
✎
19:39
|
(8) https://ibb.co/qYzS52S тут скриншот с замера производительности. Запрос ссылок всех элементов справочника выполняется заметно дольше запроса только лишь их кодов
|
|||
13
ДенисЧ
28.03.20
✎
19:40
|
(12) А ничего, что там у тебя стоит выгрзука результата запроса?
|
|||
14
rudnitskij
28.03.20
✎
19:41
|
(13) она в обоих случаях стоит. Что это меняет?
|
|||
15
ДенисЧ
28.03.20
✎
19:42
|
(14) Мдя... При выгрузке в тз помещается объект из запроса.
Если ты берёшь только код - так и выгружается только код. А если берёшь ссылку - так берётся вся ссылка... Ты меряй скорость не выгрузки, а выполнения запроса... Иначе так и будешь итсы разносить (с) |
|||
16
rudnitskij
28.03.20
✎
19:43
|
(15) итсы разносить? какой-то недоступный мне уровень юмора...
|
|||
17
rudnitskij
28.03.20
✎
19:45
|
(15) "Если ты берёшь только код - так и выгружается только код.
А если берёшь ссылку - так берётся вся ссылка... " тебе бы на курсы по запросам записаться чтоле - а то так и будешь обрушивать сервера своими неуклюжими конструкциями, которые выбирают всю ссылку, чтоб из неё потом получить номер документа |
|||
18
ДенисЧ
28.03.20
✎
19:45
|
(16) То есть ты до такого ещё не дорос? Завидую. У тебя ещё всё впереди.
А вот у 1с.... С такими погромисстамии "Судя по вопросам, некоторые не знают и 5%" |
|||
19
ДенисЧ
28.03.20
✎
19:46
|
(17) Не.. Мне на курсы по запросам не надо... А вот тебе на курсы по языку 1с...
|
|||
20
H A D G E H O G s
28.03.20
✎
19:52
|
Чудовища, мутанты, пси-атаки полей,
Выжигатель мозгов, плодящий зомби-людей. |
|||
21
H A D G E H O G s
28.03.20
✎
19:52
|
(15) А ведь ты не прав.
|
|||
22
ДенисЧ
28.03.20
✎
19:54
|
(21) Если я не прав, см. п.1
|
|||
23
H A D G E H O G s
28.03.20
✎
19:54
|
Выборка ссылки отличается от выборки кода только тем, что в первом случае читается кластерный индекс, а во втором - некластерный (по коду), который читается шустрее.
|
|||
24
rudnitskij
28.03.20
✎
19:54
|
(18) только что в запросе с объединением двух таблиц заменил выборку ссылки на выборку наименования полного. Время его выполнения в консоли сократилось с 20 секунд до 0.5.
А ты и дальше настаивай на своей бредятине - с которой платформа 1С почему-то не согласна |
|||
25
H A D G E H O G s
28.03.20
✎
19:55
|
(23) Что не отменяет дичи нашего западного коллеги.
|
|||
26
ДенисЧ
28.03.20
✎
19:57
|
(24) То есть ты подтвердил мои утверждения, а виноват оказался я. Ты, случайно, не из Западно Украины, а то, храни нас всех Пресветлая Элберет, из Польши???
|
|||
27
ДенисЧ
28.03.20
✎
19:57
|
(23) Тю. Ты не понял. Он не просто выбирает ссылку. Он её в тз выгружает...
|
|||
28
Сияющий в темноте
28.03.20
✎
19:58
|
в новых платыормах в таблицу помещается только ссылка,получение представления идет уже в момент отображения ссылки на экране.
другое дело,что ссылка-это 16 символов гуида,но в процессе она преобразуется в обьект "ссылка" для которого еще и тип задается а код передается как есть без всяких преобразований |
|||
29
H A D G E H O G s
28.03.20
✎
19:58
|
(27) Ну и что.
|
|||
30
ДенисЧ
28.03.20
✎
19:59
|
(29) Иэтта... опааа...
|
|||
31
vi0
28.03.20
✎
20:38
|
(0) просто оптимизатор часто оказывается умнее программиста, а программист ему мешает разными условиями
|
|||
32
vi0
28.03.20
✎
20:38
|
это я серъезно, не пошутил
|
|||
33
vi0
28.03.20
✎
20:41
|
рекомендую к гуглению: проталкивание предикатов
|
|||
34
Cyberhawk
29.03.20
✎
09:36
|
(10) На специалисте по платформе - ничего
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |