|
Оптимизирует ли платформа запрос в цикле? | ☑ | ||
---|---|---|---|---|
0
stopa85
27.02.18
✎
13:31
|
Делаем запрос к основной таблице документа и к табчати документа через поле таблицы:
ВЫБРАТЬ Дата, Номер, Ссылка, Товары как ТабЧастьТовары ИЗ Документ.ЗаказКлиента Ну а далее обходим выборку запроса: Пока Выборка.Следующий() Цикл Сообщить(""+ Выборка.Номер + Выборка.Дата ); ВыборкаТовары = Выборка.Товары.Выбрать(); Пока ВыборкаТовары.Слудющий() Цикл Сообщить("" + ВыборкаТовары.Товар ); КонецЦикла; КонецЦикла; Это классический запрос в цикле или его платформа волшебным образом оптимизирует? |
|||
1
BeerHelpsMeWin
27.02.18
✎
13:34
|
Что мешает сделать нормальный запрос и обход запроса по группировкам?
|
|||
2
asady
27.02.18
✎
13:34
|
(0) где запрос в цикле?
|
|||
3
ejikbeznojek
27.02.18
✎
13:35
|
Тут вроде бы нет запроса в цикле.
Хотя может я слепой просто) |
|||
4
Волшебник
27.02.18
✎
13:35
|
У профессионалов запросы в цикле не тормозят.
|
|||
5
stopa85
27.02.18
✎
13:36
|
(1) То что нужно обратиться к нескольким табчастям и документов по сотню.
|
|||
6
ejikbeznojek
27.02.18
✎
13:38
|
(5) ни как не связано с (1)
|
|||
7
stopa85
27.02.18
✎
13:40
|
(6) Тогда как?
|
|||
8
stopa85
27.02.18
✎
13:42
|
Если в документе ЗаказКлиента две-три ТабЧасти.
Например, Товары,Скидки,ОборотнаяТара. Как потом группировать и обходить по этому всему? |
|||
9
asady
27.02.18
✎
13:44
|
(8) посмотри в типовых - выборку табчастей
подскажу там используется union и доп.переменная запроса типа "имяТЧ" |
|||
10
novichok79
27.02.18
✎
13:45
|
сделай 3 запроса в пакете, по запросу на каждую табличную часть. а потом обходи эти данные.
данные табличной части где-то потом меняются? если нет, то что мешает выбрать сразу все табличные части разом? |
|||
11
dubraver
27.02.18
✎
13:46
|
Если используете sql server, то он кэширует планы выполнения запроса и при повторном вызове достает их из пула, тем самым затраты на компиляцию плана запроса исключаются.
|
|||
12
stopa85
27.02.18
✎
13:54
|
(10) Ну вот так и хочу)
|
|||
13
xaozai
27.02.18
✎
13:57
|
(0) А почему вы решили, что это запрос в цикле?
|
|||
14
Cool_Profi
27.02.18
✎
14:03
|
(13) а почему ты решил, что тч.Выбрать() - это не запрос?
|
|||
15
stopa85
27.02.18
✎
14:04
|
(13) Очень похоже, но я не решил) Платформа, в теории, может оптимизировать мой код выполнив нужное количество запросов и посунув их результаты мне (где нужно). Но, это не означает, что она это делает.
У меня сейчас нет под рукой SQL чтобы посмотреть чем он занят, пока 1С переваривает этот код. Только файловая версия, а в техжурнале я пока не силен. Увы. |
|||
16
xaozai
27.02.18
✎
14:04
|
(14) Так там выборка из результата запроса, а не из ТЧ.
|
|||
17
1Сергей
27.02.18
✎
14:05
|
(15) у тебя Запрос.Выполнить() внутри цикла?
|
|||
18
stopa85
27.02.18
✎
14:10
|
(17) у меня Выборка.Товары имеет тип значения РезультатЗапроса
Я вызываю его метод Выбрать() |
|||
19
1Сергей
27.02.18
✎
14:12
|
||||
20
stopa85
27.02.18
✎
14:13
|
(19) Что конкретно тебя смущает? То что я сделал код, проверил что он работает, занялся его оптимизацией?
Или то что я глупые вопросы задаю? |
|||
21
asady
27.02.18
✎
14:16
|
(20) оптимизировать можно только то что понимаешь.
Судя по вопросу нужно еще немного подучить матчасть - оптимизировать еще рано. |
|||
22
1Сергей
27.02.18
✎
14:16
|
(20) у тебя нет запроса в цикле. Оптимизируй запрос, а не его обход
|
|||
23
Cool_Profi
27.02.18
✎
14:32
|
(16) нет. Там выборка из тч. Внимательно на запрос посмотри
|
|||
24
HardBall
27.02.18
✎
14:39
|
Сообщить("" + ВыборкаТовары.Товар );
Будет доп запрос, чтобы получить представление ссылки. |
|||
25
stopa85
27.02.18
✎
14:40
|
(24) Да но не проэтот доп запрос речь идет. Можешь прочитать так: Сообщить("" + ВыборкаТовары.Количество );
|
|||
26
lodger
27.02.18
✎
14:41
|
(18) в этом случае, результат запроса уже помещен в память\вт и доступен для обхода через выборку. запрос к бд уже выполнен.
|
|||
27
stopa85
27.02.18
✎
14:42
|
Будет ли доп запрос в
ВыборкаТовары = Выборка.Товары.Выбрать(); Если в ИБ 100 документов ЗаказКлиента, в моем коде будет 101 запрос или только 2? |
|||
28
1Сергей
27.02.18
✎
14:44
|
(27) один
|
|||
29
H A D G E H O G s
27.02.18
✎
14:50
|
INSERT INTO #tt1 WITH(TABLOCK) (_C_1RRef, _C_2, _C_3, _TTC_1) SELECT
T1._IDRRef, T1._Number, T1._Date_Time, T1._IDRRef FROM dbo._Document34 T1 SELECT T3._LineNo344, T3._Fld345RRef, T3._Fld348, T4.SDBL_IDENTITY AS SDBL_IDENTITY FROM dbo._Document34_VT343 T3 INNER JOIN #tt1 T4 WITH(NOLOCK) ON T4._TTC_1 = T3._Document34_IDRRef ORDER BY 4 ASC Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | РеализацияТоваровУслуг.Ссылка КАК Ссылка, | РеализацияТоваровУслуг.Номер КАК Номер, | РеализацияТоваровУслуг.Дата КАК Дата, | РеализацияТоваровУслуг.Товары.( | НомерСтроки КАК НомерСтроки, | Номенклатура КАК Номенклатура, | Количество КАК Количество | ) КАК Товары |ИЗ | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг"; Выборка=Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл подВыборка=Выборка.Товары.Выбрать(); Пока подВыборка.Следующий() Цикл КонецЦикла; КонецЦикла; |
|||
30
H A D G E H O G s
27.02.18
✎
14:51
|
ORDER BY 4 ASC
какие странные мысли рождаются у конструктора SQL запросов 1С |
|||
31
stopa85
27.02.18
✎
14:53
|
(29) Спасибо тебе, добрый человек
(28) Вот видишь! Два! |
|||
32
H A D G E H O G s
27.02.18
✎
14:57
|
(31) Вообще-то - три, там был промежуточный запрос из временной таблицы, платформа выбирает для своих нужд зачем-то, скорее всего для построения основной выборки.
Но по факту, Сергей прав, "1 запрос" |
|||
33
Мимохожий Однако
27.02.18
✎
14:59
|
ОФФ: Сколько энтузиазама у ТС...)
|
|||
34
stopa85
27.02.18
✎
14:59
|
(32) ОК. Я теперь так понимаю: код из (0) имеет право на жизнь.
|
|||
35
Митяйский
27.02.18
✎
15:07
|
(34) Только не забудь про (24)
|
|||
36
xXeNoNx
27.02.18
✎
15:15
|
(34) Неа, руки бы отбил... Зачем делать за конструктор SQL то, что можешь делать сам?
|
|||
37
xXeNoNx
27.02.18
✎
15:16
|
В (29) это скорее всего формирование печатной формы...
|
|||
38
Йохохо
27.02.18
✎
15:27
|
(36) "Зачем делать за конструктор SQL то, что можешь делать сам?" что? и эти люди ругают примеры из радченко
|
|||
39
xXeNoNx
27.02.18
✎
15:39
|
(38) Больше скажу.., некоторые из этих людей ругают и Белоусова!
|
|||
40
xXeNoNx
27.02.18
✎
15:40
|
+(39) Как пример: поголовная индексация временных таблиц.
|
|||
41
DmitriyDI
27.02.18
✎
15:52
|
(34) Хотелось бы посмотреть данные замеров такого обхода и обхода к примеру, когда выбираются данные из запроса, допустим если надо обратиться не к ВыборкаТовары.Товар, а к ВыборкаТовары.Товар.Код, то в плане производительности будет ведь в разы хуже работать такой перебор.
|
|||
42
xXeNoNx
27.02.18
✎
15:55
|
(41) Хуже, особенно если в номенклатуре какая-то картинка.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |