SQL Server在JOIN语句中使用子查询

时间:2018-04-13 05:47:32

标签: sql-server subquery query-optimization jointable

如果我创建一个子查询和一个只包含整个查询所需列的select语句,那么表的JOINING是否更容易阅读或更快执行?

-- Example
    SELECT s.Id,  
           s.TransactionDate, 
           s.TransactionNo,
           s.CustomerId,
           s.SiteLocationId,
           s.SubTotal,
           sd.ItemId,
           sd.UnitPrice,
           sd.GrossAmount
    FROM tblTransactions s
        LEFT OUTER JOIN tblTransactionDetails sd ON sd.TransactionId = s.Id

与此相比:

SELECT s.Id, 
       s.TransactionDate, 
       s.TransactionNo,
       s.CustomerId,
       s.SubTotal,
       sd.ItemId,
       sd.UnitPrice,
       sd.GrossAmount
FROM tblTransactions s
    LEFT OUTER JOIN (
                        SELECT TransactionId,
                               ItemId,
                               UnitPrice,
                               GrossAmount
                        FROM tblTransactionDetails
                    ) sd ON sd.TransactionId = s.Id

给出的每个例子有哪些优点和缺点?我也在努力减少执行计划中细节的读取百分比。

1 个答案:

答案 0 :(得分:0)

我认为SQL Server为两个查询创建了相同的执行计划。如果由于列选择而希望提高性能,则应创建非聚集索引。然后,查询优化器应该使用更紧凑的索引而不是表。

CREATE NONCLUSTERED INDEX ix_tblTransactionDetails_test 
    ON tblTransactionDetails (TransactionId) INCLUDE (ItemId, UnitPrice, GrossAmount)