Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 15:48 17.06.24 
Клубове/ Компютри и Интернет / Бази данни Всички теми Следваща тема Пълен преглед*
Информация за клуба
Тема Re: По принцип има [re: TPECKATA]
Автор wqw (АзСъмЖив)
Публикувано03.04.07 18:55  



Какво значи "JOIN-а се извършва винаги преди да се проверят WHERE условията."? Стъпките на execution plan-а не са 1-към-1 със самата заявка. Ако си представим заявката като дърво, на което листа са обектите от базата (обикновено таблици или индекси), предикатите от WHERE клаузите (да, няколко) и ON клаузите се "избутват" по-близо до листата, като трансформациите с които това се прави гарантират еквивалентност на резултата.

Обърни внимание на еквивалентност. Естествено че предикат от ON клаузата на OUTER JOIN не може да слезе в WHERE клаузата -- просто двете заявки няма да са еквивалентни. Но ето тези две еквивалентни заявки

SELECT      *

FROM authors a1
JOIN authors a2
ON a1.au_id = a2.au_id

SELECT *
FROM authors a1
CROSS JOIN authors a2
WHERE a1.au_id = a2.au_id

... генерират абсолютно еднакъв резултат и още повече -- абсолютно еднакъв execution plan.

Прочетох втори път мнението ти и това което си написал именно "на теория" не е вярно. На практика обаче е възможно е да има скодоумни db engine-и, които действат по описания от тебе начин :-))

А в примера от Additional Criteria in the JOIN Clause е ясно че заявките не са еквивалентни -- това с предикат в ON на LEFT JOIN няма нищо общо със същия предикат в WHERE клаузата. Къде остава да си говорим за performance въобще!

Виж това за "рекурсивния" JOIN изби рибата :-)) Хората се затрудняват да ползват alias-и явно. Но и там няма проблем за engine-а да оптимизира (виж горните "рекурсивни" заявки). Btw, за рекурсивност можем да говорим само в CTE от ANSI SQL'99 (или MSSQL2005).

Относно така споменатите SQL разширения, които престават да са декларативни. Толкова по-зле за тях! Колкото по-декларативен е езикът, толкова по-добре engine-а ще оптимизира execution плана. Това е идеята -- vendor-ите да се "състезават" по съвършени engine-и, а не да ме дърпат във vendor lock с proprietary extension-и за обхождане на йерархии (oracle) или парсване на XML (MS).

cheers,
</wqw>




Цялата тема
ТемаАвторПубликувано
* LEFT JOIN vs RIGHT JOIN jmut   26.04.05 14:05
. * Re: LEFT JOIN vs RIGHT JOIN salle   26.04.05 16:06
. * Re: LEFT JOIN vs RIGHT JOIN jmut   26.04.05 17:00
. * Re: LEFT JOIN vs RIGHT JOIN тoшo   27.04.05 00:06
. * Re: LEFT JOIN vs RIGHT JOIN jmut   27.04.05 10:30
. * Re: (a > b) != (a < b) :) salle   27.04.05 11:21
. * Re: LEFT JOIN vs RIGHT JOIN nasko   27.04.05 11:26
. * Re: LEFT JOIN vs RIGHT JOIN тoшo   28.04.05 06:53
. * Re: LEFT JOIN vs RIGHT JOIN jmut   28.04.05 09:53
. * Теоретично TPECKATA   15.11.05 21:12
. * Re: Теоретично bal-bal   30.03.07 21:14
. * По принцип има TPECKATA   30.03.07 21:46
. * Re: По принцип има bira_more   31.03.07 01:30
. * Re: По принцип има wqw   03.04.07 15:12
. * Re: По принцип има TPECKATA   03.04.07 16:12
. * Re: По принцип има wqw   03.04.07 18:55
. * Re: По принцип има TPECKATA   03.04.07 19:03
. * Re: По принцип има wqw   03.04.07 19:46
. * Тези заявки са еквивалентни, защото TPECKATA   03.04.07 20:39
. * Re: Тези заявки са еквивалентни, защото wqw   04.04.07 12:11
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.