Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Порядок таблиц в left join [MSSQL]


Страницы:   1 2

Ega23 ©   (2008-03-05 13:10:00) 

Что-то не пойму никак..
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)

?

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


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

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


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

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

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


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

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


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


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

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


Prohodil Mimo   (2008-03-13 23:08:00) [5]

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


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


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

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


tesseract   (2008-03-12 18:30:00) [7]


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


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


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


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

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


Prohodil Mimo   (2008-03-11 16:11:00) [8]

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


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


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


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

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


Prohodil Mimo   (2008-03-09 22:08:00) [10]

Правильный_Вася   (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 .....


Anatoly Podgoretsky   (2008-03-09 20:57:00) [11]

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


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

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


Anatoly Podgoretsky   (2008-03-08 11:57:00) [13]

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


DiamondShark   (2008-03-07 15:17:00) [14]


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

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

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


Ega23   (2008-03-05 14:40:00) [15]


> stone   (05.03.08 14:25) [7]


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


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


> Ega23 ©   (05.03.08 13:10)  

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


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

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


Johnmen   (2008-03-05 13:48:00) [18]


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

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


Ega23   (2008-03-05 13:36:00) [19]

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

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


Johnmen   (2008-03-05 13:30:00) [20]

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо