Вход | Регистрация



Оптимизирует ли платформа запрос в цикле?

Оптимизирует ли платформа запрос в цикле?
Я
   stopa85
 
27.02.18 - 13:31
Делаем запрос к основной таблице документа и к табчати документа через поле таблицы:

ВЫБРАТЬ
Дата,
Номер,
 Ссылка,
 Товары как ТабЧастьТовары
ИЗ
Документ.ЗаказКлиента

Ну а далее обходим выборку запроса:
Пока Выборка.Следующий() Цикл
  
  Сообщить(""+ Выборка.Номер + Выборка.Дата );
  ВыборкаТовары = Выборка.Товары.Выбрать();
  
  Пока ВыборкаТовары.Слудющий() Цикл
    
    Сообщить("" + ВыборкаТовары.Товар );

  КонецЦикла;

КонецЦикла;

Это классический запрос в цикле или его платформа волшебным образом оптимизирует?
 
 
   BeerHelpsMeWin
 
1 - 27.02.18 - 13:34
Что мешает сделать нормальный запрос и обход запроса по группировкам?
   asady
 
2 - 27.02.18 - 13:34
(0) где запрос в цикле?
   ejikbeznojek
 
3 - 27.02.18 - 13:35
Тут вроде бы нет запроса в цикле.
Хотя может я слепой просто)
   Волшебник
 
4 - 27.02.18 - 13:35
У профессионалов запросы в цикле не тормозят.
   stopa85
 
5 - 27.02.18 - 13:36
(1) То что нужно обратиться к нескольким табчастям и документов по сотню.
   ejikbeznojek
 
6 - 27.02.18 - 13:38
(5)  ни как не связано с (1)
   stopa85
 
7 - 27.02.18 - 13:40
(6) Тогда как?
   stopa85
 
8 - 27.02.18 - 13:42
Если в документе ЗаказКлиента две-три ТабЧасти. 

Например, Товары,Скидки,ОборотнаяТара.

Как потом группировать и обходить по этому всему?
   asady
 
9 - 27.02.18 - 13:44
(8) посмотри в типовых - выборку табчастей
подскажу
там используется union и доп.переменная запроса типа "имяТЧ"
   novichok79
 
10 - 27.02.18 - 13:45
сделай 3 запроса в пакете, по запросу на каждую табличную часть. а потом обходи эти данные.
данные табличной части где-то потом меняются? если нет, то что мешает выбрать сразу все табличные части разом?
 
 Рекламное место пустует
   dubraver
 
11 - 27.02.18 - 13:46
Если используете sql server, то он кэширует планы выполнения запроса и при повторном вызове достает их из пула, тем самым затраты на компиляцию плана запроса исключаются.
   stopa85
 
12 - 27.02.18 - 13:54
(10) Ну вот так и хочу)
   xaozai
 
13 - 27.02.18 - 13:57
(0) А почему вы решили, что это запрос в цикле?
   Cool_Profi
 
14 - 27.02.18 - 14:03
(13) а почему ты решил, что тч.Выбрать() - это не запрос?
   stopa85
 
15 - 27.02.18 - 14:04
(13) Очень похоже, но я не решил) Платформа, в теории, может оптимизировать мой код выполнив нужное количество запросов и посунув их результаты мне (где нужно). Но, это не означает, что она это делает.

У меня сейчас нет под рукой SQL чтобы посмотреть чем он занят, пока 1С переваривает этот код. Только файловая версия, а в техжурнале я пока не силен. Увы.
   xaozai
 
16 - 27.02.18 - 14:04
(14) Так там выборка из результата запроса, а не из ТЧ.
   1Сергей
 
17 - 27.02.18 - 14:05
(15) у тебя Запрос.Выполнить() внутри цикла?
   stopa85
 
18 - 27.02.18 - 14:10
(17) у меня Выборка.Товары имеет тип значения РезультатЗапроса
Я вызываю его метод Выбрать()
   1Сергей
 
19 - 27.02.18 - 14:12
   stopa85
 
20 - 27.02.18 - 14:13
(19) Что конкретно тебя смущает? То что я сделал код, проверил что он работает, занялся его оптимизацией?

Или то что я глупые вопросы задаю?
   asady
 
21 - 27.02.18 - 14:16
(20) оптимизировать можно только то что понимаешь.
Судя по вопросу нужно еще немного подучить матчасть - оптимизировать еще рано.
   1Сергей
 
22 - 27.02.18 - 14:16
(20) у тебя нет запроса в цикле. Оптимизируй запрос, а не его обход
   Cool_Profi
 
23 - 27.02.18 - 14:32
(16) нет. Там выборка из тч. Внимательно на запрос посмотри
   HardBall
 
24 - 27.02.18 - 14:39
Сообщить("" + ВыборкаТовары.Товар );
Будет доп запрос, чтобы получить представление ссылки.
   stopa85
 
25 - 27.02.18 - 14:40
(24) Да но не проэтот доп запрос речь идет. Можешь прочитать так: Сообщить("" + ВыборкаТовары.Количество );
   lodger
 
26 - 27.02.18 - 14:41
(18) в этом случае, результат запроса уже помещен в память\вт и доступен для обхода через выборку. запрос к бд уже выполнен.
   stopa85
 
27 - 27.02.18 - 14:42
Будет ли доп запрос в
ВыборкаТовары = Выборка.Товары.Выбрать(); 

Если в ИБ 100 документов ЗаказКлиента, в моем коде будет 101 запрос или только 2?
   1Сергей
 
28 - 27.02.18 - 14:44
(27) один
   H A D G E H O G s
 
29 - 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

    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    РеализацияТоваровУслуг.Ссылка КАК Ссылка,
    |    РеализацияТоваровУслуг.Номер КАК Номер,
    |    РеализацияТоваровУслуг.Дата КАК Дата,
    |    РеализацияТоваровУслуг.Товары.(
    |        НомерСтроки КАК НомерСтроки,
    |        Номенклатура КАК Номенклатура,
    |        Количество КАК Количество
    |    ) КАК Товары
    |ИЗ
    |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг";
    Выборка=Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        подВыборка=Выборка.Товары.Выбрать();
        Пока подВыборка.Следующий() Цикл
        КонецЦикла;
    КонецЦикла;
   H A D G E H O G s
 
30 - 27.02.18 - 14:51
ORDER BY 4 ASC

какие странные мысли рождаются у конструктора SQL запросов 1С
   stopa85
 
31 - 27.02.18 - 14:53
(29) Спасибо тебе, добрый человек
(28) Вот видишь! Два!
   H A D G E H O G s
 
32 - 27.02.18 - 14:57
(31) Вообще-то - три, там был промежуточный запрос из временной таблицы, платформа выбирает для своих нужд зачем-то, скорее всего для построения основной выборки.

Но по факту, Сергей прав, "1 запрос"
   МимохожийОднако
 
33 - 27.02.18 - 14:59
ОФФ: Сколько энтузиазама у ТС...)
 
 
   stopa85
 
34 - 27.02.18 - 14:59
(32) ОК. Я теперь так понимаю: код из (0) имеет право на жизнь.
   Митяйский
 
35 - 27.02.18 - 15:07
(34) Только не забудь про (24)
   xXeNoNx
 
36 - 27.02.18 - 15:15
(34) Неа, руки бы отбил... Зачем делать за конструктор SQL то, что можешь делать сам?
   xXeNoNx
 
37 - 27.02.18 - 15:16
В (29) это скорее всего формирование печатной формы...
   Йохохо
 
38 - 27.02.18 - 15:27
(36) "Зачем делать за конструктор SQL то, что можешь делать сам?" что? и эти люди ругают примеры из радченко
   xXeNoNx
 
39 - 27.02.18 - 15:39
(38) Больше скажу.., некоторые из этих людей ругают и Белоусова!
   xXeNoNx
 
40 - 27.02.18 - 15:40
+(39)  Как пример: поголовная индексация временных таблиц.
   DmitriyDI
 
41 - 27.02.18 - 15:52
(34) Хотелось бы посмотреть данные замеров такого обхода  и обхода к примеру, когда выбираются данные из запроса, допустим если надо обратиться не к ВыборкаТовары.Товар, а к ВыборкаТовары.Товар.Код, то в плане производительности будет ведь в разы хуже работать такой перебор.
   xXeNoNx
 
42 - 27.02.18 - 15:55
(41) Хуже, особенно если в номенклатуре какая-то картинка.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует