К вопросу об оптимизации запросов v8 с использованием виртуальных таблиц (1С: v8: Язык запросов)

Вопрос Можно ли в запросах 1С v8 всегда заменять условие «ГДЕ» параметрами среза виртуальной таблицы?
Ответ
Часто встречающаяся рекомендация по выполнению опимизации запросов: переносить условие из конструкции ГДЕ в параметры виртуальной таблицы. Однако без понимания, как это работает, легко совершить ошибку.

Пример неправильной оптимизации запроса
Допустим, периодический регистр сведений «КурсыВалют» содержит измерение «Вал» и ресурсы «Ист» и «Знач».
Выполним два запроса:

Запрос 1:

ВЫБРАТЬ
Валюта.Курс
ИЗ
РегистрСведений.КурсыВалют.СрезПоследних()
ГДЕ
Источник = &Ист

Запрос 2:

ВЫБРАТЬ
Валюта.Курс
ИЗ
РегистрСведений.КурсыВалют.СрезПоследних(,Источник=&Ист)

Выполним отбор по Ист = х См. рис. На нем показано, что получится в результате их выполнения



Если «Ист» будет не реквизитом или ресурсом, а измерением, тогда оба запроса вернут одинаковый результат. Поясним подробнее механику.

1. При использовании конструкции «ГДЕ»

1.1 В случае, когда измерение – Вал, а остальное — ресурсы

1.1.1 срез последних сначала отберет все последние записи по всем измерениям (выделено жирным):

дата

знач

Вал

Ист

03

12

evr

y

04

13

руб

z

05

14

$

x

1.1.2 и из них выберет удовлетворяющие условию строки:

дата

знач

Вал

Ист

05

14

$

x

1.2 В случае, когда измерения – Вал и Ист, а остальное — ресурсы

1.2.1 срез последних сначала отберет все последние записи по всем измерениям (выделено жирным):

дата

знач

Вал

Ист

01

10

руб

x

02

11

$

y

03

12

evr

y

04

13

руб

z

05

14

$

x

1.2.2 и из них выберет удовлетворяющие условию строки:

дата

знач

Вал

Ист

01

10

руб

x

05

14

$

x

2. При использовании параметров виртуальной таблицы

2.1 В случае, когда измерение – Вал, а остальное — ресурсы

2.1.1 Срез последних отберет записи по условию:

дата

знач

Вал

Ист

01

10

руб

x

05

14

$

x

2.1.2 и из них возьмет последние:

дата

знач

Вал

Ист

01

10

руб

x

05

14

$

x

2.2 В случае, когда измерения – Вал и Ист, а остальное — ресурсы

2.2.1 Срез последних отберет записи по условию:

дата

знач

Вал

Ист

01

10

руб

x

05

14

$

x

2.2.2 и из них возьмет последние:

дата

знач

Вал

Ист

01

10

руб

x

05

14

$

x

На этих примерах хорошо видно, что промежуточная таблица с конструкцией «ГДЕ» (1.1.1, 1.2.1) больше, чем таблица, отобранная по параметрам(2.1.1,2.2.1). Разумеется, это плохо. Помимо того, что тратится больше ресурсов системы, скорость исполнения такого запроса будет ниже. Разница будет тем более заметна, чем больше у регистра измерений.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.