Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.14;
Скачать: CL | DM;

Вниз

Порядок таблиц в left join   Найти похожие ветки 

 
Ega23 ©   (2008-03-05 13:10) [0]

Что-то не пойму никак..
Table1, 30000 записей
Table2, 300 записей.

Select ....
from Table1 T1 left join Table2 on (t1.Fld=T2.Fld)

или


Select ....
from Table1 T1 left join Table2 on (t1.Fld=T2.Fld)

?

И так и так одинаково по времени получается...


 
b z   (2008-03-05 13:21) [1]

Не мудрено ... а в чем вопрос?


 
Ega23 ©   (2008-03-05 13:23) [2]

пардон, очепятка

Select ....
from Table1 T1 left join Table2 on (t1.Fld=T2.Fld)

или

Select ....
from Table2 T2 left join Table1 on (t2.Fld=T1.Fld)


 
Johnmen ©   (2008-03-05 13:30) [3]

Разница есть.
Но при таких количествах записей, её заметить трудно. А порой и невозможно...


 
Ega23 ©   (2008-03-05 13:36) [4]

Хорошо. Table1 - 4.000.000
Tabl2 - 50.000

условие в where - Table2.Fld in (от 1 до 50 значений).


 
Johnmen ©   (2008-03-05 13:48) [5]


> Ega23 ©   (05.03.08 13:36) [4]

Не понял, это про что?


 
Правильный_Вася   (2008-03-05 14:04) [6]

у них разница в результирующем наборе, в первую очередь


 
stone   (2008-03-05 14:25) [7]


> Ega23 ©   (05.03.08 13:10)  

для оптимизации см. варианты джойна (loop, hash) также можно указать принудительный порядок джойна используя OPTION (FORCE ORDER)


 
Ega23 ©   (2008-03-05 14:40) [8]


> stone   (05.03.08 14:25) [7]


Тёзка, спасибо!


 
DiamondShark ©   (2008-03-07 15:17) [9]


> Ega23 ©   (05.03.08 13:23) [2]

А как лучше:
3 - 8
или
8 - 3
?

left join некоммутативная операция, поэтому, спрашивать "или" -- по меньшей мере, странно.


 
Anatoly Podgoretsky ©   (2008-03-08 11:57) [10]

Другое дело, если первое LEFT OUTER JOIN, а второе RIGHT OUTER JOIN, тогда можно было бы еще говорить, а так полная бессмыслица, результаты абсолютно разные. Ну или INNER JOIN


 
Правильный_Вася   (2008-03-09 18:15) [11]

видимо, у него частный случай, когда что outer, что inner - дают одинаковый результат
иначе бы уже заметил Правильный_Вася   (05.03.08 14:04) [6]


 
Anatoly Podgoretsky ©   (2008-03-09 20:57) [12]

Так может надо использовать INNER JOIN как самый производительный вариант?


 
Prohodil Mimo ©   (2008-03-09 22:08) [13]

Правильный_Вася   (09.03.08 18:15) [11]

ну так у него и есть одинаковый результат.
отличия были бы, если бы после

Select ....
from Table1 T1 left join Table2 on (t1.Fld=T2.Fld)


или

Select ....
from Table2 T2 left join Table1 on (t2.Fld=T1.Fld)


было WHERE .....


 
Правильный_Вася   (2008-03-10 16:04) [14]


> Prohodil Mimo ©   (09.03.08 22:08) [13]

ты хорошо подумал?
а теперь проведи эксперимент


 
Prohodil Mimo ©   (2008-03-11 16:11) [15]

Правильный_Вася   (10.03.08 16:04) [14]
а теперь проведи эксперимент


Провёл.
Получилось так, как я и говорил :о)
Но если ещё подумать, то да, различия могут быть.


 
tesseract ©   (2008-03-12 18:30) [16]


> Так может надо использовать INNER JOIN как самый производительный
> вариант?


С чегой-то то он производительный ? Просто игнорирует несоотвествие с обоих сторон.


> Prohodil Mimo ©   (09.03.08 22:08) [13]


Зависит от данных и степени нормализации, при 3-ей нормализации всё одинаково.
У меня реально на 1С-ке при SQL запросах результаты разных join разные, 2 недели репой бился.  

ЗЫ: убил бы авторов парсера SQL от MS.


 
Правильный_Вася   (2008-03-13 11:04) [17]


> Зависит от данных и степени нормализации, при 3-ей нормализации
> всё одинаково.

байки
представь 2 таблицы, одна из которых ссылается на другую 1:N, при этом в ней есть ссылки не на все записи
и попробуй


 
Prohodil Mimo ©   (2008-03-13 23:08) [18]

Правильный_Вася   (13.03.08 11:04) [17]
вот только в этом случае и получится по разному. Но если каждая запись ссылатся на запись из другой таблицы, то оба запроса будут одинаковы.


 
Правильный_Вася   (2008-03-14 10:50) [19]


> Но если каждая запись ссылатся на запись из другой таблицы,
>  то оба запроса будут одинаковы.

тогда outer join и не нужен
ведь он нужен для случаев отсутствия, чтоб null"ы подставить


 
Кщд   (2008-03-14 10:51) [20]

>Prohodil Mimo ©   (13.03.08 23:08) [18]
Вы используете для таких таблиц внешнее объединение?
зачем?


 
Prohodil Mimo ©   (2008-03-14 18:00) [21]

Кщд   (14.03.08 10:51) [20]

для каждого случая свой вид объединения.
речь то шла об left join, а тестировалось на том, что под руку попалось.


 
Prohodil Mimo ©   (2008-03-14 18:00) [22]

Кщд   (14.03.08 10:51) [20]
и вообще, я то тут при чём?



Страницы: 1 вся ветка

Текущий архив: 2008.09.14;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.022 c
15-1216144094
ZIvas
2008-07-15 21:48
2008.09.14
С чего начинать изучение


8-1185571678
megajober3d
2007-07-28 01:27
2008.09.14
Как в Delphi получить из BMP файл GIF но "прозрачный"...


11-1193144413
Виктор007
2007-10-23 17:00
2008.09.14
Помогите создать кнопку


15-1216808213
Vlad Oshin
2008-07-23 14:16
2008.09.14
V:Variant; В чем разница? V:=varEmpty, V:=null, V := Unassigned;


11-1193314040
LazyBob
2007-10-25 16:07
2008.09.14
новые GRush