Имя: Пароль:
1C
1С v8
Запросы. В списке VS соединение
0 DirecTwiX
 
21.03.13
23:59
Вот тут (http://www.forum.mista.ru/topic.php?upd&id=657511) мне сказали, что в SQL проверка IN выполняется для каждой строки, и что надо использовать соединение. В 1С дела обстоят так же?

Предупрежден - значит вооружен =)
1 H A D G E H O G s
 
22.03.13
00:15
Брешуть.
2 H A D G E H O G s
 
22.03.13
00:17
Тоже самое внутреннее соединение будет.
3 Sorm
 
22.03.13
00:21
(2) С чем - с подзапросом, который формирует список значений?
4 H A D G E H O G s
 
22.03.13
00:28
(3) Да
5 H A D G E H O G s
 
22.03.13
00:29
ВЫБРАТЬ
   1 КАК Поле1
ИЗ
   РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ГДЕ
   ТоварыНаСкладах.Номенклатура В
           (ВЫБРАТЬ
               Номенклатура.Ссылка
           ИЗ
               Справочник.Номенклатура КАК Номенклатура)

дает план:

StmtText                                                                                                                                                                                                          
--------                                                                                                                                                                                                          
Merge Join(Inner Join, MERGE:([T2].[_IDRRef])=([T1].[_Fld20472RRef]), RESIDUAL:([KATAP].[dbo].[_AccumRg20470].[_Fld20472RRef] as [T1].[_Fld20472RRef]=[KATAP].[dbo].[_Reference152].[_IDRRef] as [T2].[_IDRRef]))
 |--Clustered Index Scan(OBJECT:([KATAP].[dbo].[_Reference152].[PK___Referen__AC8ED0C40972373D] AS [T2]), ORDERED FORWARD)                                                                                      
 |--Index Scan(OBJECT:([KATAP].[dbo].[_AccumRg20470].[_Accum20470_ByDims20478_RTRN] AS [T1]), ORDERED FORWARD)
6 H A D G E H O G s
 
22.03.13
00:30
Который аналогичен запросу:

ВЫБРАТЬ
   1 КАК Поле1
ИЗ
   РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
       ПО ТоварыНаСкладах.Номенклатура = Товары.Ссылка
7 H A D G E H O G s
 
22.03.13
00:36
В ветке
SQL. Оптимизировать ещё один запрос
в посте (13) бред.
8 Лефмихалыч
 
22.03.13
00:38
(7) ну, не то, чтобы прямо совсем бред. Ты же не станешь утверждать, что план запроса всегда будет таким.
9 Sorm
 
22.03.13
00:42
(7) Надо проверить. При работе с большими БД (ну, несколько сотен гигабайт, терабайты) IN я всегда менял на временные таблицы, получал прирост скорости , иногда в разы. Планы не смотрел, насколько я знаю, сравнение в IN происходит последовательно с каждым элементом, при условии испльзования запроса - запрос выполняется.
10 H A D G E H O G s
 
22.03.13
00:45
(9) "сравнение в IN происходит последовательно с каждым элементом"

А как дела обстоят при Соединении?
11 Sorm
 
22.03.13
00:55
(10) Если я правильно помню, merge join для In таки невозможен, только nested loop join, как раз последовательное сравнение, да ещё с выполнением запроса.
12 Sammo
 
22.03.13
04:55
Я видел такое мнение для скуля. Ссылку сейчас не дам.
Для 1с ситуация может быть иной
Программист всегда исправляет последнюю ошибку.