Имя: Пароль:
1C
1С v8
Подскажите как быстрее ....
0 MatrosoV AleXXXand_R
 
26.10.11
10:48
Хочу понять - что быстрее отработает

ВЫБРАТЬ
 Док1.Реквизит1,
 Док1.Реквизит2
ИЗ Док1 КАК Док1

ЛЕВОЕ СОЕДИНЕНИЕ
ДОК2 КАК Док2
ПО Док1.Реквизит2 = Док2.Реквизит2

ГДЕ Док2.Реквизит2 = &ЗначениеРеквизита2

ИЛИ


ВЫБРАТЬ
 Док1.Реквизит1,
 Док1.Реквизит2
ИЗ Док1 КАК Док1

ЛЕВОЕ СОЕДИНЕНИЕ
ДОК2 КАК Док2
ПО Док2.Реквизит2 = &ЗначениеРеквизита2

И почему?

Сам склонен ко второму варианту, поскольку со второй таблицы
берутся не все записи, а с отбором
1 Рэйв
 
26.10.11
10:49
Ну ты герой...А первая таблица каким боком в условии соединения?
2 Рэйв
 
26.10.11
10:50
он тебе тупо приаттачит все док2 с реквизитом равном параметру
3 ptiz
 
26.10.11
10:51
Во втором варианте в условии ПО не хватает Док1.Реквизит2 = Док2.Реквизит2
4 MatrosoV AleXXXand_R
 
26.10.11
10:52
(1) Запросы набрал вручную, возможно неправильно немного написал
В первой таблице условие устанавливается после соединения, интересует - что быстрее выполнится
5 Defender aka LINN
 
26.10.11
10:52
Главное - не проверяй ни за что!
6 Axel2009
 
26.10.11
10:52
(4) для скуля монопенисуально
7 MatrosoV AleXXXand_R
 
26.10.11
10:53
(3) со второй таблицы выбираю записи с заданным условием Реквизит2, поэтому такого нет
8 MatrosoV AleXXXand_R
 
26.10.11
10:53
(6) то есть одинаково?
9 Defender aka LINN
 
26.10.11
10:53
+(5) Ну и я молчу, что эти запросы разный результат вообще вернут.
10 Axel2009
 
26.10.11
10:55
(8) если выбирать между
ВЫБРАТЬ
 Док1.Реквизит1,
 Док1.Реквизит2
ИЗ Док1 КАК Док1

ЛЕВОЕ СОЕДИНЕНИЕ
ДОК2 КАК Док2
ПО Док1.Реквизит2 = Док2.Реквизит2

ГДЕ Док2.Реквизит2 = &ЗначениеРеквизита2

ИЛИ

ВЫБРАТЬ
 Док1.Реквизит1,
 Док1.Реквизит2
ИЗ Док1 КАК Док1

ЛЕВОЕ СОЕДИНЕНИЕ
ДОК2 КАК Док2
ПО Док1.Реквизит2 = Док2.Реквизит2
И Док2.Реквизит2 = &ЗначениеРеквизита2

то да, одинаково.
если как в (0) они не идентичны
11 MatrosoV AleXXXand_R
 
26.10.11
10:55
(9) почему разный? Одинаковый

В обоих случаях устанавливается Левое соединение со второй таблицей и отфильтровываются записи Реквизит2 из нее, только логика разная
12 SerMaxim
 
26.10.11
10:55
(9) +1...
(0) Почитай книжки просто по SQL - может наступит озарение....
13 MatrosoV AleXXXand_R
 
26.10.11
10:56
Хорошо, тогда какой быстрее выполнится из запросов в (10)?
14 Axel2009
 
26.10.11
10:56
(10)+ даже эти запросы не идентичны, потому как для левого соединения отфильтруется по разному.
15 MatrosoV AleXXXand_R
 
26.10.11
10:57
(14) результат будет же одинаковый по идее
16 Defender aka LINN
 
26.10.11
10:57
(11) Выполни и удивись.
17 НЕА123
 
26.10.11
10:57
(0)
самый "быстрый"

ВЫБРАТЬ
 Док1.Реквизит1,
 Док1.Реквизит2
ИЗ Док1 КАК Док1,
Док2 КАК Док2
ГДЕ Док1.Реквизит2 = Док2.Реквизит2
И Док2.Реквизит2 = &ЗначениеРеквизита2
18 ptiz
 
26.10.11
10:57
(11) Во втором случае SQL видит Док2.Реквизит2 = &ЗначениеРеквизита2.
Вот, нашел подходящую строку и, бац - к ней подключил все строки из Док1. Зашибись.
19 Axel2009
 
26.10.11
10:57
(13) эти запросы тоже не идентичны. вместо ЛЕВОГО поставить ВНУТРЕННЕЕ - то будет одинаковое время выполнения
20 NcSteel
 
26.10.11
10:58
(0) Первое быстрее , так как будет внутреннее соединение
21 Axel2009
 
26.10.11
10:59
(15) сначала присоеденили по реквизиту, в правой колонке (Док2) значение НУЛЛ, в ГДЕ отфильтровали и убрали строки, потому как НУЛЛ
во втором случае сразу отфильтровали Док2, и присоединили и там где нет для Док1 из Док2, будет НУЛЛ
22 MatrosoV AleXXXand_R
 
26.10.11
11:00
(21) то есть быстродействие будет одинаковым? без разницы?
23 Axel2009
 
26.10.11
11:02
(22) для разных запросов быстродействие не может быть одинаковым
24 Axel2009
 
26.10.11
11:03
(23)+ которые возвращают РАЗНЫЕ данные
25 Defender aka LINN
 
26.10.11
11:15
(22) 1-й запрос вообще может ничего не вернуть.
26 MatrosoV AleXXXand_R
 
26.10.11
11:19
(25) + и второй тоже
27 Дарт Вейдер
 
26.10.11
11:25
(0) стесняюсь спросить, а нахера вообще соединение с Док2?
если выбирается только реквизиты Док1

 Док1.Реквизит1,
 Док1.Реквизит2

или имелось ввиду

 Док1.Реквизит1,
 Док2.Реквизит2
?
28 MatrosoV AleXXXand_R
 
26.10.11
11:27
(27) Запросы чисто для вида

Можешь считать выборку так
 Док1.Реквизит1,
 Док1.Реквизит2,
 Док2.Реквизит2,

Смысл был в том - чтобы понять, что быстрее