УТ 11 Медленная работа одного запроса #764860


#0 by eugenyfs
В УТ11 есть такая штука "Распоряжения на оформление". Там находится список который формируется одним запросом и этот запрос стал выполняться очень медленно. А поскольку при проведении документа есть оповещение обновить этот список, то проведение документа замедлилось донельзя и пришлось из оповещения обновление списка распоряжений убрать. Вот часть запроса (все лишнее я убрал). ВЫБРАТЬ РАЗРЕШЕННЫЕ ЗаказыКлиентов.ЗаказКлиента КАК ЗаказКлиента ИЗ РегистрНакопления.ЗаказыКлиентов.Остатки(, ВЫБРАТЬ              ЗаказыКлиентов.ЗаказКлиента КАК ЗаказКлиента Медлительность заключается в групповом операторе вхождения "В" в параметрах регистра накопления. Если просто выполнить вложенный запрос ВЫБРАТЬ              ЗаказыКлиентов.ЗаказКлиента КАК ЗаказКлиента Он выполняется мгновенно. В чем может быть причина медленной работы группового оператора. Ведь раньше такого вроде бы не было. И это связано только с регистром накопления. Я заменял вложенный запрос на: ВЫБРАТЬ ЗаказыКлиентов.Ссылка КАК ЗаказКлиента ИЗ Документ.ЗаказКлиента КАК ЗаказыКлиентов Все работает быстро. При чем все заказы я удалил. Добавил всего один заказ. В регистре одна единственная запись. Спасибо.
#1 by Волшебная клизма
А нафига вообще Таблицу Заказы Клентов ограничивать выборкой из этого же регистра???
#2 by Волшебная клизма
Смысла такого запроса я вообще е вижу, ну на крайняк я бы предложил хотя бы по разному таблицы обозвать
#3 by Dmitrii
Оперативные остатки по регистру ограничивают остатками на &ДатаОтгрузки.
#4 by vde69
у тебя вложенный запрос не проиндексирован и количество выборки не дает оптимизатору его преобразовать к простому условию вынеси во временную индексируемую таблицу ВЫБРАТЬ               ЗаказыКлиентов.ЗаказКлиента КАК ЗаказКлиента и второе, в этом подзапросе заказ клиента наверняка имеет составной тип, а это жесткий удар... тут можно использовать "выразить"
#5 by Dmitrii
Хотя не совсем понятно зачем именно таким образом это делать. Ну да я торговлю со времён ТиСа не видал. Фиг знает в чём там собака порылась.
#6 by Волшебная клизма
Попробуй временую таблицу лучше создать, а уже новый пакет запроса ограничивай выборкой этой таблицы
#7 by Fragster
Запрос из динамического списка
#8 by Fragster
а рлс включен?
#9 by vde69
тогда все сложнее... думаю имеет смысл использовать явное приведение типа заказа через "выразить", а вообще план запроса надо глянуть, но что-то мне подсказывает, что там будет много маленьких запросов "TOP 1" и проблема именно в этом
#10 by Lex1C
Согласен с . Посмотри через профайлер, в какой SQL запрос транслируется твой исходный 1Свский. Будешь очень удивлен, какая там будет громоздкая конструкция.
#11 by НЕА123
может через ВНУТРЕННЕЕ СОЕДИНЕНИЕ?
#12 by eugenyfs
В общем приведение типа заказа в подзапросе через "ВЫРАЗИТЬ" решило проблему. Запрос летает. Как написал vde69 это жесткий удар! Буду знать. Всем огромное спасибо. Хотя конфигурация типовая. Но есть моменты ))
#13 by vde69
неопределенный тип очень часто превращается в джойн с различными таблицами метаданных конфигурации, при этом поиск по индексу не возможен в принципе, в результате у тебя выходит фул скан на всю таблицу, то есть условие "ГДЕ" наложенное на физическую таблицу будет куда мягче обработано
#14 by eugenyfs
Да теперь понятно почему были тормоза. Просто запрос выглядит просто и понятно. И я особо не вдумывался, что в нем может быть не так. Действительно следует смотреть во, что он транслируется потом. Или просто знать, что так делать нельзя! Удивляет то, что это типовая конфигурация и она у миллиона пользователей. И что у всех такие тормоза на проведении документа. Еще раз спасибо за помощь.
#15 by Ma3eIIa
еще можешь так попробовать ВЫБРАТЬ     ЗаказыКлиентов.ЗаказКлиента КАК ЗаказКлиента ПОМЕСТИТЬ ВТЗаказы     РегистрНакопления.ЗаказыКлиентов.Остатки(                 ИЗ
#16 by vde69
временные таблицы нельзя использовать в динамических списках
#17 by Ma3eIIa
вечно забываю. об этом костыле :)
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С