|
УТ 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) вечно забываю. об этом костыле :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |