powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Nested Joins
11 сообщений из 11, страница 1 из 1
Nested Joins
    #32021535
savin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь за чайницкий вопрос, но что такое nested joins и когда (в общих чертах) их имеет смысл использовать? В ВOL чего-то про них почти ни слова не сказано.
...
Рейтинг: 0 / 0
Nested Joins
    #32021536
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В BOL ничего нет потому что нет в MS SQL nested joins, а есть три типа join - nested loops, merge и hash отличаются они алгоритмом объединения таблиц, какой тип использовать решает оптимизатор.
...
Рейтинг: 0 / 0
Nested Joins
    #32021544
savin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А это тогда у меня что, если не nested joins?


SELECT
c."ObjectID",
dbo.GetSubjectFullName(subj_plntf.ObjectID) AS FIO_PLNTF,
dbo.GetSubjectFullName(subj_dfndt.ObjectID) AS FIO_DFNDT,
c."Number" AS CASEFIRSTNUMBER
FROM
dbo."Case" c
left JOIN ("dbo"."Participant" p
JOIN "dbo"."ParticipantCategory" pcat ON (pcat."ObjectID"=p."ParticipantCategory" and pcat."Code"= 'S1') JOIN "dbo"."Subject" subj_plntf ON subj_plntf."ObjectID" = p."Subject"
) ON p."Case"=c."ObjectID"
left JOIN ("dbo"."Participant" p2
JOIN "dbo"."ParticipantCategory" pcat2 ON (pcat2."ObjectID"=p2."ParticipantCategory" and pcat2."Code"= 'S2')
JOIN "dbo"."Subject" subj_dfndt ON subj_dfndt."ObjectID" = p2."Subject"
) ON p2."Case"=c."ObjectID"
ORDER BY
CASEFIRSTNUMBER, FIO_PLNTF, FIO_DFNDT
...
Рейтинг: 0 / 0
Nested Joins
    #32021555
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 savin
Выделите пожалуйста то место в коде где по вашему присутствует nested join.
Объясните мне почему вы считаете что это именно nested join.
...
Рейтинг: 0 / 0
Nested Joins
    #32021584
savin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
left JOIN ("dbo"."Participant" p
JOIN "dbo"."ParticipantCategory" pcat ON (pcat."ObjectID"=p."ParticipantCategory" and pcat."Code"= 'S1') JOIN "dbo"."Subject" subj_plntf ON subj_plntf."ObjectID" = p."Subject"
) ON p."Case"=c."ObjectID"
...
Рейтинг: 0 / 0
Nested Joins
    #32021595
Chudik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я согласен с Геннадием, нету такого понятия как "Nested Joins" в MS SQL. Следующие картинки поясняют разницу "вложенного" объединения и обычного "плоского".
"Вложенные" объединения

"Плоские" объединения

Как видно, первый способ оптимизатор считает более быстрым, возможно потому, что там отбрасываются лишние записи и используется Nested Loop вместо Hash Match.
...
Рейтинг: 0 / 0
Nested Joins
    #32021604
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 savin
Ах вон вы о чем


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

Посмотрите статью в BOL "joins-SQL Server, three or more tables".
...
Рейтинг: 0 / 0
Nested Joins
    #32021605
savin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если бы не менялось, я бы и без скобок написал. Но если писать его без скобок, то там вообще ни одной записи не возвращается. А так - и дела с участниками(с перечислением попарно оных), и дела без них.

На мысь использовать скобки навела меня статья в MSDN. Но там про Access было. Я вот и решил попробовать эту технику в SQL2000. на удивление сработало сразу так, как я и хотел. Просто потом стало интересно, такой финт ушами где-то документирован (BOL) или нет?
...
Рейтинг: 0 / 0
Nested Joins
    #32021614
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 savin

Хм, по быстрому в BOL ничего найти не удалось.
У меня к вам просьба, если не сложно сбросьте копии планов запросов со скобками и без мне на mail.
...
Рейтинг: 0 / 0
Nested Joins
    #32021639
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел планы, отличия понятны, в BOL информация есть, но какая то она невнятная см "FROM clause, FROM clause (described)"

Цитатата:
< joined_table > ::=
< table_source > < join_type > < table_source > ON < search_condition >
| < table_source > CROSS JOIN < table_source >
| [ ( ] < joined_table > [ ) ]


Еще цитата:
< joined_table >

Is a result set that is the product of two or more tables, for example:

SELECT *
FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3
RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4
ON tab3.c1 = tab4.c1
ON tab2.c3 = tab4.c3

For multiple CROSS joins, use parentheses to change the natural order of the joins.


Более подробно можно почитать здесь:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/office97/html/output/F1/D2/S5A32A.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/office97/html/output/F1/D2/S5A32D.asp
...
Рейтинг: 0 / 0
Nested Joins
    #32021668
Я фигею, уважаемая редакция. Ведь вложенные соединения давно документированы в ANSI SQL, и ими я пользовался ещё в Interbase.
Сразу скажу, что, естественно, nested joins в природе существуют. Но всегда надо очень точно знать, приносят они тебе выгоду или нет. Так, в половине случаев запросы с nested joins удалось переписать в запросы с подзапросами или в несколько запросов с применением переменной-таблицы, что дало мне ускорение до 40%. Разная отчётность.
В общем, смотрите сами.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Nested Joins
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]