|
Долго выполняется запрос УТ 11.4 | ☑ | ||
---|---|---|---|---|
0
John83
10.09.19
✎
15:59
|
Простейший запрос, но выполняется очень уж долго
ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка, Номенклатура.ЕдиницаИзмерения.Владелец КАК Владелец, Номенклатура.ЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.ЕдиницаИзмерения.Владелец ССЫЛКА Справочник.Номенклатура Как оптимизировать? И почему так долго? |
|||
1
bootini
10.09.19
✎
16:04
|
Может это:
Получение данных через точку от полей составного типа Рекомендации Если в запросе используется получение значения через точку от поля составного ссылочного типа, то при выполнении этого запроса будет выполняться соединение со всеми таблицами объектов, входящими в этот составной тип. В результате SQL текст запроса чрезвычайно усложняется, и при его выполнении оптимизатор СУБД может выбрать неоптимальный план. Это может привести к серьезным проблемам производительности и даже к неработоспособности запроса в отдельных случаях. В частности, не рекомендуется обращаться к реквизитам регистратора регистра (например, "ТоварыНаСкладах.Регистратор.Дата") и т.п. При этом не важно в какой части запроса вы используете реквизит, полученный через точку от поля составного типа - в списке возвращаемых полей, в условии и т.п. Во всех случаях такое обращение может привести к проблемам производительности. Общая рекомендация заключается в том, чтобы по возможности ограничить количество соединений в таких запросах. Для этого можно использовать следующие приемы: Избегайте избыточности при создании полей составных ссылочных типов. Указывайте ровно столько возможных типов для данного поля, сколько необходимо. Не следует без необходимости использовать типы "любая ссылка" или "ссылка на любой документ" и т.п. Вместо этого следует более тщательно проанализировать прикладную логику и назначить для поля ровно те возможные типы ссылок, которые необходимы для решения задачи. При необходимости жертвуйте компактностью хранения данных ради производительности. Если в запросе вам понадобилось значение, полученное через ссылку, то, возможно, это значение можно хранить непосредственно в данном объекте. Например, если при работе с регистром вам требуется информация о дате регистратора, вы можете завести в регистре соответствующий реквизит и назначать ему значение при проведении документов. Это приведет к дублированию информации и некоторому (незначительному) увеличению ее объема, но может существенно повысить производительность и стабильность работы запроса. При необходимости жертвуйте компактностью и универсальностью кода ради производительности. Как правило, для выполнения конкретного запроса в данных условиях не нужны все возможные типы данной ссылки. В этом случае, следует ограничить количество возможных типов при помощи функции ВЫРАЗИТЬ. Если данный запрос является универсальным и используется в нескольких разных ситуациях (где типы ссылки могут быть разными), то можно формировать запрос динамически, подставляя в функцию ВЫРАЗИТЬ тот тип, который необходим при данных условиях. Это увеличит объем исходного кода и, возможно, сделает его менее универсальным, но может существенно повысить производительность и стабильность работы запроса. |
|||
2
John83
10.09.19
✎
16:08
|
(1) я понял бы, если обращался через
Номенклатура.ЕдиницаИзмерения.Владелец.Ссылка но ЕдиницаИзмерения не является составным типом |
|||
3
ДенисЧ
10.09.19
✎
16:09
|
А план запроса что говорит?
|
|||
4
_Дайвер_
10.09.19
✎
16:11
|
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура, Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.ЕдиницаИзмерения.Владелец ССЫЛКА Справочник.Номенклатура |
|||
5
_Дайвер_
10.09.19
✎
16:11
|
(4) Условие ГДЕ даже не нужно
|
|||
6
yzimin
10.09.19
✎
16:13
|
(2) Номенклатура.ЕдиницаИзмерения.Владелец - составной тип
Попробуй ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка, Выразить(Номенклатура.ЕдиницаИзмерения.Владелец Как Справочник.УпаковкиЕдиницыИзмерения) КАК Владелец, Номенклатура.ЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Выразить(Номенклатура.ЕдиницаИзмерения.Владелец Как Справочник.УпаковкиЕдиницыИзмерения) ССЫЛКА Справочник.Номенклатура |
|||
7
H A D G E H O G s
10.09.19
✎
16:14
|
(0) Вывод в консоль?
Просто там ничего криминального нет |
|||
8
John83
10.09.19
✎
16:18
|
(6) наверное имел в виду
ГДЕ ВЫРАЗИТЬ(Номенклатура.ЕдиницаИзмерения.Владелец КАК Справочник.Номенклатура) ССЫЛКА Справочник.Номенклатура так да, шустро отрабатывает |
|||
9
John83
10.09.19
✎
16:19
|
вот и сам думаю...
сколько подобных запросов делал - ни разу с такой проблемой не сталкивался всем спасибо! |
|||
10
yzimin
10.09.19
✎
16:19
|
(8) ну да КАК Справочник.Номенклатура
А за чем вам действительно условие ГДЕ, как заметил (5) ? у вас там и так только нужные упаковки. Или это гипотетический пример? |
|||
11
John83
10.09.19
✎
16:25
|
(10) нужно везде присвоить общие ед. измерения, т.е. владелец которых является Справочник.НаборыУпаковок
А сейчас там полный бардак. Много позиций, в которых Номенклатура.ЕдиницаИзмерения.Владелец <> Номенклатура.Ссылка |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |