|   |   | 
| 
 | УТ 11 Медленная работа одного запроса | ☑ | ||
|---|---|---|---|---|
| 0
    
        eugenyfs 09.02.16✎ 14:00 | 
        В УТ11 есть такая штука "Распоряжения на оформление". 
 Там находится список который формируется одним запросом и этот запрос стал выполняться очень медленно. А поскольку при проведении документа есть оповещение обновить этот список, то проведение документа замедлилось донельзя и пришлось из оповещения обновление списка распоряжений убрать. Вот часть запроса (все лишнее я убрал). ВЫБРАТЬ РАЗРЕШЕННЫЕ ЗаказыКлиентов.ЗаказКлиента КАК ЗаказКлиента ИЗ РегистрНакопления.ЗаказыКлиентов.Остатки(, ЗаказКлиента В ( ВЫБРАТЬ ЗаказыКлиентов.ЗаказКлиента КАК ЗаказКлиента ИЗ РегистрНакопления.ЗаказыКлиентов.Остатки(&ДатаОтгрузки, (Склад = &Склад)) КАК ЗаказыКлиентов )) КАК ЗаказыКлиентов Медлительность заключается в групповом операторе вхождения "В" в параметрах регистра накопления. Если просто выполнить вложенный запрос ВЫБРАТЬ ЗаказыКлиентов.ЗаказКлиента КАК ЗаказКлиента ИЗ РегистрНакопления.ЗаказыКлиентов.Остатки(&ДатаОтгрузки, (Склад = &Склад)) КАК ЗаказыКлиентов Он выполняется мгновенно. В чем может быть причина медленной работы группового оператора. Ведь раньше такого вроде бы не было. И это связано только с регистром накопления. Я заменял вложенный запрос на: ВЫБРАТЬ ЗаказыКлиентов.Ссылка КАК ЗаказКлиента ИЗ Документ.ЗаказКлиента КАК ЗаказыКлиентов Все работает быстро. При чем все заказы я удалил. Добавил всего один заказ. В регистре одна единственная запись. Спасибо. | |||
| 1
    
        Волшебная клизма 09.02.16✎ 14:03 | 
        А нафига вообще Таблицу Заказы Клентов ограничивать выборкой из этого же регистра???     | |||
| 2
    
        Волшебная клизма 09.02.16✎ 14:05 | 
        Смысла такого запроса я вообще е вижу, ну на крайняк я бы предложил хотя бы по разному таблицы обозвать     | |||
| 3
    
        Dmitrii гуру 09.02.16✎ 14:06 | 
        (1) (2) Оперативные остатки по регистру ограничивают остатками на &ДатаОтгрузки.     | |||
| 4
    
        vde69 09.02.16✎ 14:08 | 
        у тебя вложенный запрос не проиндексирован и количество выборки не дает оптимизатору его преобразовать к простому условию
 вынеси во временную индексируемую таблицу ВЫБРАТЬ ЗаказыКлиентов.ЗаказКлиента КАК ЗаказКлиента ИЗ РегистрНакопления.ЗаказыКлиентов.Остатки(&ДатаОтгрузки, (Склад = &Склад)) КАК ЗаказыКлиентов и второе, в этом подзапросе заказ клиента наверняка имеет составной тип, а это жесткий удар... тут можно использовать "выразить" | |||
| 5
    
        Dmitrii гуру 09.02.16✎ 14:08 | 
        (3) Хотя не совсем понятно зачем именно таким образом это делать. Ну да я торговлю со времён ТиСа не видал. Фиг знает в чём там собака порылась.     | |||
| 6
    
        Волшебная клизма 09.02.16✎ 14:09 | 
        Попробуй временую таблицу лучше создать, а уже новый пакет запроса ограничивай выборкой этой таблицы     | |||
| 7
    
        Fragster гуру 09.02.16✎ 14:10 | 
        (4) Запрос из динамического списка     | |||
| 8
    
        Fragster гуру 09.02.16✎ 14:10 | 
        а рлс включен?     | |||
| 9
    
        vde69 09.02.16✎ 14:14 | 
        (7) тогда все сложнее...
 думаю имеет смысл использовать явное приведение типа заказа через "выразить", а вообще план запроса надо глянуть, но что-то мне подсказывает, что там будет много маленьких запросов "TOP 1" и проблема именно в этом | |||
| 10
    
        Lex1C 09.02.16✎ 14:24 | 
        (0)Согласен с (9). Посмотри через профайлер, в какой SQL запрос транслируется твой исходный 1Свский. Будешь очень удивлен, какая там будет громоздкая конструкция.     | |||
| 11
    
        НЕА123 09.02.16✎ 14:42 | 
        (0)
 может через ВНУТРЕННЕЕ СОЕДИНЕНИЕ? | |||
| 12
    
        eugenyfs 09.02.16✎ 15:15 | 
        В общем приведение типа заказа в подзапросе через "ВЫРАЗИТЬ" решило проблему. Запрос летает.
 Как написал vde69 это жесткий удар! Буду знать. Всем огромное спасибо. Хотя конфигурация типовая. Но есть моменты )) | |||
| 13
    
        vde69 09.02.16✎ 20:17 | 
        неопределенный тип очень часто превращается в джойн с различными таблицами метаданных конфигурации, при этом поиск по индексу не возможен в принципе, в результате у тебя выходит фул скан на всю таблицу, то есть условие "ГДЕ" наложенное на физическую таблицу будет куда мягче обработано     | |||
| 14
    
        eugenyfs 10.02.16✎ 09:29 | 
        Да теперь понятно почему были тормоза. Просто запрос выглядит просто и понятно. И я особо не вдумывался, что в нем может быть не так. Действительно следует смотреть во, что он транслируется потом. Или просто знать, что так делать нельзя!
 Удивляет то, что это типовая конфигурация и она у миллиона пользователей. И что у всех такие тормоза на проведении документа. Еще раз спасибо за помощь. | |||
| 15
    
        Ma3eIIa 10.02.16✎ 09:33 | 
        (14) еще можешь так попробовать
 ВЫБРАТЬ ЗаказыКлиентов.ЗаказКлиента КАК ЗаказКлиента ПОМЕСТИТЬ ВТЗаказы ИЗ РегистрНакопления.ЗаказыКлиентов.Остатки(&ДатаОтгрузки, Склад = &Склад) КАК ЗаказыКлиентов ИНДЕКСИРОВАТЬ ПО ЗаказКлиента ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ ЗаказыКлиентов.ЗаказКлиента КАК ЗаказКлиента ИЗ РегистрНакопления.ЗаказыКлиентов.Остатки( , ЗаказКлиента В (ВЫБРАТЬ ВТ.ЗаказКлиента ИЗ ВТЗаказы КАК ВТ)) КАК ЗаказыКлиентов | |||
| 16
    
        vde69 10.02.16✎ 10:39 | 
        (15) временные таблицы нельзя использовать в динамических списках     | |||
| 17
    
        Ma3eIIa 10.02.16✎ 10:49 | 
        (16) вечно забываю. об этом костыле :)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |