Имя: Пароль:
1C
1С v8
Конструкция В или соединение таблиц?
0 SYS-eva
 
12.05.12
12:26
Добрый день коллеги! собственно вопрос:
Какой вариант запроса оптимален?


Вариант 1:
//***************************************************************
ВЫБРАТЬ
   ТаблицаВодителей.Период КАК Период,
   ТаблицаВодителей.Водитель КАК Водитель,
   ТаблицаВодителей.Транспорт КАК Транспорт
ПОМЕСТИТЬ Водители
ИЗ
   РегистрСведений.РегистрСведений_тест.СрезПоследних(КОНЕЦПЕРИОДА(&Дата, ДЕНЬ), Транспорт = &Транспорт) КАК ТаблицаВодителей
ИНДЕКСИРОВАТЬ ПО
   Период

;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   МАКСИМУМ(ПериодыРегистра.Период) КАК Период
ПОМЕСТИТЬ ТаблицаПериода
ИЗ
   РегистрСведений.РегистрСведений_тест.СрезПоследних(КОНЕЦПЕРИОДА(&Дата, ДЕНЬ), Транспорт = &Транспорт) КАК ПериодыРегистра
ИНДЕКСИРОВАТЬ ПО
   Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Водители.Водитель,
   Водители.Транспорт,
   Водители.Период
ИЗ
   ТаблицаПериода КАК ТаблицаПериода
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Водители КАК Водители
       ПО ТаблицаПериода.Период = Водители.Период
//********************************************************************

Вариант 2:

ВЫБРАТЬ
   ТаблицаВодителей.Период КАК Период,
   ТаблицаВодителей.Водитель КАК Водитель,
   ТаблицаВодителей.Транспорт КАК Транспорт
ПОМЕСТИТЬ Водители
ИЗ
   РегистрСведений.РегистрСведений_тест.СрезПоследних(КОНЕЦПЕРИОДА(&Дата, ДЕНЬ), Транспорт = &Транспорт) КАК ТаблицаВодителей

ИНДЕКСИРОВАТЬ ПО
   Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   МАКСИМУМ(ПериодыРегистра.Период) КАК Период
ПОМЕСТИТЬ ТаблицаПериода
ИЗ
   РегистрСведений.РегистрСведений_тест.СрезПоследних(КОНЕЦПЕРИОДА(&Дата, ДЕНЬ), Транспорт = &Транспорт) КАК ПериодыРегистра

ИНДЕКСИРОВАТЬ ПО
   Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Водители.Водитель,
   Водители.Транспорт,
   Водители.Период
ИЗ
   Водители КАК Водители
ГДЕ
   Водители.Период В
           (ВЫБРАТЬ
               ТаблицаПериода.Период
           ИЗ
               ТаблицаПериода КАК ТаблицаПериода)

Заранее спасибо.
1 МихаилМ
 
12.05.12
12:29
об оптимальности вариантов запроса
имеет смысл говорить только в контексте конкретной субд
2 Deon
 
12.05.12
12:30
А этот запрос возвратит не одну запись?

ВЫБРАТЬ
   МАКСИМУМ(ПериодыРегистра.Период) КАК Период
ПОМЕСТИТЬ ТаблицаПериода
ИЗ
   РегистрСведений.РегистрСведений_тест.СрезПоследних(КОНЕЦПЕРИОДА(&Дата, ДЕНЬ), Транспорт = &Транспорт) КАК ПериодыРегистра
ИНДЕКСИРОВАТЬ ПО
   Период
;
3 SYS-eva
 
12.05.12
12:31
да одну
4 SYS-eva
 
12.05.12
12:31
ИНДЕКСИРОВАТЬ ПО
   Период тут явно лишнее))
5 SYS-eva
 
12.05.12
12:32
меня интересует третий запрос в пакете
6 SYS-eva
 
12.05.12
12:32
МихаилМ MSSQL
7 acsent
 
12.05.12
12:33
не так совсем нужно делать. тут нужно ручной разворот среза последних
8 SYS-eva
 
12.05.12
12:48
acsent - пример в студию и почему?
9 KAO111
 
12.05.12
13:06
(0) у меня на MS SQL в подобном случае оказался одинаковый план построения запроса как в условии В, так и в соединении.

Файловая версия когда то была быстрее в случае соединения таблиц.

Но лучше конечно протестировать.
10 SYS-eva
 
12.05.12
13:07
KAO111 спасибо - тема закрыта
11 Deon
 
12.05.12
13:07
(9) Вот мне кажется, что sql-ный запрос ваще одинаковый будет
Основная теорема систематики: Новые системы плодят новые проблемы.