|   |   | 
| 
 | Почему такая скорость запроса | ☑ | ||
|---|---|---|---|---|
| 0
    
        Dmitry_FFF 20.06.22✎ 15:52 | 
        Есть РегистрСведений Регистр. Ресурсы Дата, Документ (Любой документ)
 Есть Запрос ВЫБРАТЬ Регистр.Документ, Максимум(Регистр.Дата) КАК Дата ИЗ РегистрСведений.Регистр КАК Регистр ГДЕ Регистр.Документ в (&Документ1) Сгруппировать По Регистр.Документ Индексировать по Документ; Так вот если в параметре Документ, а это массив, все элементы одного типа, то запрос исполняется за 0,001 секунду, а если разного то 1 секунду. Почему? Как ускорить? | |||
| 1
    
        Ёпрст гуру 20.06.22✎ 16:00 | 
        (0) Выразить, чтоб не было со всеми таблицами доков из-за составного реквизита     | |||
| 2
    
        Ёпрст гуру 20.06.22✎ 16:01 | 
        *соединения     | |||
| 3
    
        arsik гуру 20.06.22✎ 16:02 | 
        (0) Объединением
 В каждое объединение свой тип документа | |||
| 4
    
        Dmitry_FFF 20.06.22✎ 16:09 | 
        Понял, спасибо     | |||
| 5
    
        Конструктор1С 20.06.22✎ 16:37 | 
        (0) платформа преобразует вот это условие
 ГДЕ Регистр.Документ в (&Документ1) когда передаешь один тип документа условие будет where T1.<ПолеСсылки> in (<Ссылки>) так индекс может использоваться когда передаешь доки разного типа, платформа преобразует условие where case when T1.<ПолеТипа> = <Тип1> then T1.<ПолеСсылки> in (<Ссылки1>) when T1.<ПолеТипа> = <Тип2> then T1.<ПолеСсылки> in (<Ссылки2>) when T1.<ПолеТипа> = <Тип3> then T1.<ПолеСсылки> in (<Ссылки3>) ... в индекс не попадает | |||
| 6
    
        H A D G E H O G s 20.06.22✎ 17:24 | 
        Настало время офигительных историй     | |||
| 7
    
        Конструктор1С 20.06.22✎ 18:06 | 
        (6) ?     | |||
| 8
    
        lodger 20.06.22✎ 18:10 | 
        (7) 
 думаю там а) не блоки "когда тип тогда", а левые джойны, причем со всеми сразу. б) нет перебора in (<Ссылки>) в in (<Ссылки1>) (<Ссылки2>) (<Ссылки3>), а просто один и тот же массив втыкается в каждый seek. | |||
| 9
    
        lodger 20.06.22✎ 18:11 | 
        единственная правда может быть в том, что оптимизатор запроса может понять монотип. это то и видно в (0)     | |||
| 10
    
        lodger 20.06.22✎ 18:15 | 
        (0) как ускорить - раздели массив на монотипы перед запросом. (получим 1-2-5-10 массивов).
 сделать сборщик текста запроса от числа массивов. (выбрать а из б где в &п1 объединить все выбрать а из б где в &п2 ...) выполнить запрос с 1-2-5-10 параметрами массивов. | |||
| 11
    
        youalex 20.06.22✎ 19:02 | 
        По условию 
 ГДЕ ВзаиморасчетыСКонтрагентами.Регистратор В (&Регистратор) вот такое строится (&Регистратор - список из двух ссылок разного типа): WHERE ((T1._RecorderTRef = 0x00000186 AND T1._RecorderRRef IN (?)) OR (T1._RecorderTRef = 0x00000187 AND T1._RecorderRRef IN (?))) Можно попробовать массив ссылок загнать в ТЗ, ТЗ - в вирт. таблицу (1с типы сама добавит), c вирт. таблицей - inner join | |||
| 12
    
        H A D G E H O G s 20.06.22✎ 19:03 | 
        (7) см (11)     | |||
| 13
    
        Immortal 20.06.22✎ 19:40 | 
        Хоспади, в 3 правильный ответ     | |||
| 14
    
        Конструктор1С 20.06.22✎ 19:57 | 
        (11)(12) таки, не совсем
 ВЫБРАТЬ РегистрСведений1.Измерение1 КАК Измерение1, РегистрСведений1.Измерение2 КАК Измерение2, РегистрСведений1.Измерение3 КАК Измерение3, РегистрСведений1.Реквизит1 КАК Ресурс1, РегистрСведений1.Реквизит1 КАК Реквизит1 ИЗ РегистрСведений.РегистрСведений1 КАК РегистрСведений1 ГДЕ РегистрСведений1.Измерение2 В(&Измерение2) Измерение2 - составной тип SELECT T1._Fld99RRef, T1._Fld100_TYPE, T1._Fld100_RTRef, T1._Fld100_RRRef, T1._Fld101RRef, T1._Fld108, T1._Fld108 FROM dbo._InfoRg98 T1 WHERE EXISTS(SELECT 1 FROM #tt1 T2 WITH(NOLOCK) WHERE (T2._INVALUELISTTRef IS NOT NULL AND T2._INVALUELISTRRef IS NOT NULL) AND ((T1._Fld100_TYPE = 0x08 AND T1._Fld100_RTRef = T2._INVALUELISTTRef AND T1._Fld100_RRRef = T2._INVALUELISTRRef))) но это 21-я платформа, раньше иначе делала | |||
| 15
    
        timurhv 20.06.22✎ 20:56 | 
        (11) на больших объемах 1С так и делает     | |||
| 16
    
        youalex 20.06.22✎ 21:00 | 
        (14) у меня 8.3.20. 
 В вашем варианте, кстати, должно нормально отрабатывать без изощрений с разбивкой на типы и пр. емнип, по такому же принципу 1с строит "парные" условия, типа ИЗ РегистрНакопления.Товары.Остатки(, (Склад, Номенклатура) В (ВЫБРАТЬ вт.Склад, вт.Номенклатура Из вт)) | |||
| 17
    
        youalex 20.06.22✎ 21:12 | 
        (15) да, с большим списком у меня построился запрос из (14)     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |