如果我创建一个子查询和一个只包含整个查询所需列的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
给出的每个例子有哪些优点和缺点?我也在努力减少执行计划中细节的读取百分比。
答案 0 :(得分:0)
我认为SQL Server为两个查询创建了相同的执行计划。如果由于列选择而希望提高性能,则应创建非聚集索引。然后,查询优化器应该使用更紧凑的索引而不是表。
CREATE NONCLUSTERED INDEX ix_tblTransactionDetails_test
ON tblTransactionDetails (TransactionId) INCLUDE (ItemId, UnitPrice, GrossAmount)