Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Nested Joins / 11 сообщений из 11, страница 1 из 1
25.01.2002, 14:31
    #32021535
savin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested Joins
Извиняюсь за чайницкий вопрос, но что такое nested joins и когда (в общих чертах) их имеет смысл использовать? В ВOL чего-то про них почти ни слова не сказано.
...
Рейтинг: 0 / 0
25.01.2002, 14:38
    #32021536
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested Joins
В BOL ничего нет потому что нет в MS SQL nested joins, а есть три типа join - nested loops, merge и hash отличаются они алгоритмом объединения таблиц, какой тип использовать решает оптимизатор.
...
Рейтинг: 0 / 0
25.01.2002, 18:32
    #32021544
savin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested Joins
А это тогда у меня что, если не 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
27.01.2002, 04:07
    #32021555
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested Joins
2 savin
Выделите пожалуйста то место в коде где по вашему присутствует nested join.
Объясните мне почему вы считаете что это именно nested join.
...
Рейтинг: 0 / 0
28.01.2002, 05:55
    #32021584
savin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested Joins
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
28.01.2002, 07:26
    #32021595
Chudik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested Joins
Я согласен с Геннадием, нету такого понятия как "Nested Joins" в MS SQL. Следующие картинки поясняют разницу "вложенного" объединения и обычного "плоского".
"Вложенные" объединения

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

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


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

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

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

Хм, по быстрому в BOL ничего найти не удалось.
У меня к вам просьба, если не сложно сбросьте копии планов запросов со скобками и без мне на mail.
...
Рейтинг: 0 / 0
28.01.2002, 13:03
    #32021639
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested Joins
Посмотрел планы, отличия понятны, в 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
28.01.2002, 16:11
    #32021668
Nested Joins
Я фигею, уважаемая редакция. Ведь вложенные соединения давно документированы в ANSI SQL, и ими я пользовался ещё в Interbase.
Сразу скажу, что, естественно, nested joins в природе существуют. Но всегда надо очень точно знать, приносят они тебе выгоду или нет. Так, в половине случаев запросы с nested joins удалось переписать в запросы с подзапросами или в несколько запросов с применением переменной-таблицы, что дало мне ускорение до 40%. Разная отчётность.
В общем, смотрите сами.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Nested Joins / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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