|
профиль запроса в 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
|
Спасибо за ответы. Понял, что если нельзя передать массив, то через выборку временной таблицы лучше не извращаться, а сделать левое соединение со срезом.
|
|