|   |   | 
| 
 | Оптимизирует ли платформа запрос в цикле? | ☑ | ||
|---|---|---|---|---|
| 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) Хуже, особенно если в номенклатуре какая-то картинка.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |