Имя: Пароль:
1C
1С v8
профиль запроса в sql, вопрос к знатокам
0 Очкарик
 
18.01.14
14:19
Вариант 1:
Выбрать
Вт.Поле1,
Вт.Поле2,
Вт.Поле3,
Рег.Ресурс,
Из ВремТаб КАК Вт
ЛЕВОЕ Соединение РегистрСведений.Тест.СрезПоследних(, Измерение1 В (Выбрать Различные ВремТаб.Поле1 из ВремТаб Как ВремТаб) И Измерение2 В (Выбрать Различные ВремТаб.Поле2 из ВремТаб Как ВремТаб)) КАК Рег
По Вт.Поле1 = Рег.Измерение1 И Вт.Поле2 = Рег.Измерение2

Вариант2:

Выбрать
Вт.Поле1,
Вт.Поле2,
Вт.Поле3,
Рег.Ресурс,
Из ВремТаб КАК Вт
ЛЕВОЕ Соединение РегистрСведений.Тест.СрезПоследних(, Измерение1 В (&Массив1) И Измерение2 В (&Массив2)) КАК Рег
По Вт.Поле1 = Рег.Измерение1 И Вт.Поле2 = Рег.Измерение2

По варианту 1 в sql создается вложенный подзапрос.
А по варианту2 что будет?
1 Ненавижу 1С
 
гуру
18.01.14
14:25
(0) подзапрос попроще

СрезПоследних в любом случае дает подзапрос
2 Очкарик
 
18.01.14
15:02
(1) Измерение1 В (Выбрать Различные ВремТаб.Поле1 из ВремТаб Как ВремТаб
Это работает намного дольше, чем левое соединение
3 NcSteel
 
18.01.14
15:07
(1) + Лучше срез последних реализовать своими силами
4 Apokalipsec
 
18.01.14
15:09
(2) Конечно дольше возьми профайлер и посмотри во сколько скульных запросов у тебя развернется первый, а во сколько второй.
Во второй ты передаешь конечный массив параметром, а в первом должно построиться ещё 2  запроса по временной таблице + время на создание этих двух временных таблиц и выгрузку туда.
5 NcSteel
 
18.01.14
15:10
Массивы конечно лучше, так как оптимизатору легче составить план запроса из-за доп двух запросов.
6 Очкарик
 
18.01.14
16:47
Спасибо за ответы. Понял, что если нельзя передать массив, то через выборку временной таблицы лучше не извращаться, а сделать левое соединение со срезом.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.