Unix Technical Forum

Performance between Standard Join and Inner Join

This is a discussion on Performance between Standard Join and Inner Join within the SQL Server forums, part of the Microsoft SQL Server category; --> On Jun 28, 2:33 am, "news.onet.pl" <wkrugio...@poczta.onet.pl> wrote: > > Select * From Quiz, Question Where Quiz.id = Question.id ...


Go Back   Unix Technical Forum > Database Server Software > Microsoft SQL Server > SQL Server

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #11 (permalink)  
Old 03-01-2008, 03:24 PM
Alex Kuznetsov
 
Posts: n/a
Default Re: Performance between Standard Join and Inner Join

On Jun 28, 2:33 am, "news.onet.pl" <wkrugio...@poczta.onet.pl> wrote:
> > Select * From Quiz, Question Where Quiz.id = Question.id

>
> IMHO today inner join is a standard
>
> BTW left join is faster than inner join...
>
> Regards, Wojtaswww.e-krug.com


what about right join?

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #12 (permalink)  
Old 03-01-2008, 03:24 PM
news.onet.pl
 
Posts: n/a
Default Re: Performance between Standard Join and Inner Join

> For starters, an outer join (such as left join) will only return the
> same result as an inner join if no rows from the outer table would be
> eliminated when running the inner join.


Yes, but when left and inner join returns same results - left is faster
(probably because it doesn't check the dependencies - just join results)
We use left join instead inner in situations we know that inner join will
not cut results....


Regards, Wojtas


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #13 (permalink)  
Old 03-01-2008, 03:24 PM
Dan Guzman
 
Posts: n/a
Default Re: Performance between Standard Join and Inner Join

> Yes, but when left and inner join returns same results - left is faster

Can you post an example (DDL and sample data) that illustrates this
behavior, including with the execution plans?

I can see how this might happen in cases where the inner join uses an
execution plan that turns out to be sub-optimal. This could occur because
statistics are stale or the disk subsystem is unusually biased in favor of
scans (often used on outer joins). However, I think using LEFT JOINs
instead of INNER JOINs is not the proper solution.

--
Hope this helps.

Dan Guzman
SQL Server MVP

"news.onet.pl" <wkrugiolka@poczta.onet.pl> wrote in message
news:f6aa7t$e7p$1@news.onet.pl...
>> For starters, an outer join (such as left join) will only return the
>> same result as an inner join if no rows from the outer table would be
>> eliminated when running the inner join.

>
> Yes, but when left and inner join returns same results - left is faster
> (probably because it doesn't check the dependencies - just join results)
> We use left join instead inner in situations we know that inner join will
> not cut results....
>
>
> Regards, Wojtas
>
>


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #14 (permalink)  
Old 03-01-2008, 03:25 PM
--CELKO--
 
Posts: n/a
Default Re: Performance between Standard Join and Inner Join

>> However, I think using LEFT JOINs instead of INNER JOINs is not the proper solution.<<

The OUTER JOINS have to be executed in left to right order, so that is
probably what the optimizer will do first. I think that detecting
when an OUTER JOIN can be replaced by an INNER JOIN so that the query
can be re-ordered would be very hard and probably impossible in the
general case.


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #15 (permalink)  
Old 03-01-2008, 03:25 PM
Gert-Jan Strik
 
Posts: n/a
Default Re: Performance between Standard Join and Inner Join

"news.onet.pl" wrote:
>
> > For starters, an outer join (such as left join) will only return the
> > same result as an inner join if no rows from the outer table would be
> > eliminated when running the inner join.

>
> Yes, but when left and inner join returns same results - left is faster
> (probably because it doesn't check the dependencies - just join results)
> We use left join instead inner in situations we know that inner join will
> not cut results....


I understand your case, but still I disagree. I still claim that it is
not faster, not as a rule. As a rule, it is equally fast or slower.
However, I am aware that this is mostly an academic discussion. In most
situations I would expect the same performance.

If you specify Left Join instead of Inner Join, you are basically doing
two things:
1. you are reducing the number of potential access paths during
compilation
2. you are 'forcing' the access path between the two tables: from the
outer table to the inner table

The result of [1] is positive, because a full compile would require less
time and resources. Of course this is only relevant when the optimizer
actually performs a full compile.

The result of [2] is negative, because it disqualifies query plans that
might be more efficient than the 'forced' left to right access path.
Obviously, this is only relevant if there actually is a more efficient
query plan.

The smarter the optimizer gets, the smaller the performance advantage of
Inner Join will be ([2]), and the smaller the potentially added
compilation cost will be ([1]).

The bottom line is, that you could see suboptimal performance in such a
Left Join scenario when you know that no rows from the outer table will
be eliminated but the optimizer does not.

I think this Left Join trick is a very good query hint if the query
underperforms because of a bad query plan. But using query hints without
a reason (simply out of routine) still sounds inappropriate to me.

Of course, if you have an example where a Left Join performs better than
the Inner Join equivalent, then I would be most interested to see it! If
you could post or describe such an example, that would be great.

Thanks,
Gert-Jan
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #16 (permalink)  
Old 03-01-2008, 03:25 PM
Erland Sommarskog
 
Posts: n/a
Default Re: Performance between Standard Join and Inner Join

Gert-Jan Strik (sorry@toomuchspamalready.nl) writes:
> If you specify Left Join instead of Inner Join, you are basically doing
> two things:
> 1. you are reducing the number of potential access paths during
> compilation
> 2. you are 'forcing' the access path between the two tables: from the
> outer table to the inner table


Maybe. If the condition is over trusted non-nullable FK, the optimizer
should look through the trick. For instance:

select OD.*
from Northwind..[Order Details] OD
left join Northwind..Orders O ON OD.OrderID = O.OrderID
WHERE O.CustomerID = 'VINET'

Starts with accessing the Orders table.


--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se

Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/pro...ads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodinf...ons/books.mspx
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 12:31 PM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
www.UnixAdminTalk.com