INNER JOIN vs INNER JOIN (SELECT . FROM)

后端 未结 4 1759
栀梦
栀梦 2021-02-01 00:27

Is there any difference in terms of performance between these two versions of the same query?

--Version 1
SELECT p.Name, s.OrderQty
FROM Product p
INNER JOIN Sal         


        
相关标签:
4条回答
  • 2021-02-01 01:02

    There won't be much difference. Howver version 2 is easier when you have some calculations, aggregations, etc that should be joined outside of it

    --Version 2 
    SELECT p.Name, s.OrderQty 
    FROM Product p 
    INNER JOIN 
    (SELECT ProductID, SUM(OrderQty) as OrderQty FROM SalesOrderDetail GROUP BY ProductID
    HAVING SUM(OrderQty) >1000) s 
    on p.ProductID = s.ProdctId 
    
    0 讨论(0)
  • 2021-02-01 01:03

    You did the right thing by checking from query plans. But I have 100% confidence in version 2. It is faster when the number off records are on the very high side.

    My database has around 1,000,000 records and this is exactly the scenario where the query plan shows the difference between both the queries. Further, instead of using a where clause, if you use it in the join itself, it makes the query faster :
    SELECT p.Name, s.OrderQty
    FROM Product p
    INNER JOIN (SELECT ProductID, OrderQty FROM SalesOrderDetail) s on p.ProductID = s.ProductID WHERE p.isactive = 1

    The better version of this query is :

    SELECT p.Name, s.OrderQty
    FROM Product p
    INNER JOIN (SELECT ProductID, OrderQty FROM SalesOrderDetail) s on p.ProductID = s.ProductID AND p.isactive = 1

    (Assuming isactive is a field in product table which represents the active/inactive products).

    0 讨论(0)
  • 2021-02-01 01:06

    You are correct. You did exactly the right thing, checking the query plan rather than trying to second-guess the optimiser. :-)

    0 讨论(0)
  • 2021-02-01 01:25

    Seems to be identical just in case that SQL server will not try to read data which is not required for the query, the optimizer is clever enough

    It can have sense when join on complex query (i.e which have joings, groupings etc itself) then, yes, it is better to specify required fields.

    But there is one more point. If the query is simple there is no difference but EVERY extra action even which is supposed to improve performance makes optimizer works harder and optimizer can fail to get the best plan in time and will run not optimal query. So extras select can be a such action which can even decrease performance

    0 讨论(0)
提交回复
热议问题