-
Что-то не пойму никак..
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)
?
И так и так одинаково по времени получается...
-
Не мудрено ... а в чем вопрос?
-
пардон, очепятка
Select ....
from Table1 T1 left join Table2 on (t1.Fld=T2.Fld)
или
Select ....
from Table2 T2 left join Table1 on (t2.Fld=T1.Fld)
-
Разница есть.
Но при таких количествах записей, её заметить трудно. А порой и невозможно...
-
Хорошо. Table1 - 4.000.000
Tabl2 - 50.000
условие в where - Table2.Fld in (от 1 до 50 значений).
-
> Ega23 © (05.03.08 13:36) [4]
Не понял, это про что?
-
у них разница в результирующем наборе, в первую очередь
-
> Ega23 © (05.03.08 13:10)
для оптимизации см. варианты джойна (loop, hash) также можно указать принудительный порядок джойна используя OPTION (FORCE ORDER)
-
> stone (05.03.08 14:25) [7]
Тёзка, спасибо!
-
> Ega23 © (05.03.08 13:23) [2]
А как лучше:
3 - 8
или
8 - 3
?
left join некоммутативная операция, поэтому, спрашивать "или" -- по меньшей мере, странно.
-
Другое дело, если первое LEFT OUTER JOIN, а второе RIGHT OUTER JOIN, тогда можно было бы еще говорить, а так полная бессмыслица, результаты абсолютно разные. Ну или INNER JOIN
-
видимо, у него частный случай, когда что outer, что inner - дают одинаковый результат
иначе бы уже заметил Правильный_Вася (05.03.08 14:04) [6]
-
Так может надо использовать INNER JOIN как самый производительный вариант?
-
Правильный_Вася (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 .....
-
> Prohodil Mimo © (09.03.08 22:08) [13]
ты хорошо подумал?
а теперь проведи эксперимент
-
Правильный_Вася (10.03.08 16:04) [14]
а теперь проведи эксперимент
Провёл.
Получилось так, как я и говорил :о)
Но если ещё подумать, то да, различия могут быть.
-
> Так может надо использовать INNER JOIN как самый производительный
> вариант?
С чегой-то то он производительный ? Просто игнорирует несоотвествие с обоих сторон.
> Prohodil Mimo © (09.03.08 22:08) [13]
Зависит от данных и степени нормализации, при 3-ей нормализации всё одинаково.
У меня реально на 1С-ке при SQL запросах результаты разных join разные, 2 недели репой бился.
ЗЫ: убил бы авторов парсера SQL от MS.
-
> Зависит от данных и степени нормализации, при 3-ей нормализации
> всё одинаково.
байки
представь 2 таблицы, одна из которых ссылается на другую 1:N, при этом в ней есть ссылки не на все записи
и попробуй
-
Правильный_Вася (13.03.08 11:04) [17]
вот только в этом случае и получится по разному. Но если каждая запись ссылатся на запись из другой таблицы, то оба запроса будут одинаковы.
-
> Но если каждая запись ссылатся на запись из другой таблицы,
> то оба запроса будут одинаковы.
тогда outer join и не нужен
ведь он нужен для случаев отсутствия, чтоб null'ы подставить