|
Подскажите как быстрее .... | ☑ | ||
---|---|---|---|---|
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, Смысл был в том - чтобы понять, что быстрее |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |