【发布时间】:2012-07-19 10:34:22
【问题描述】:
同一查询的这两个版本在性能方面有什么不同吗?
--Version 1
SELECT p.Name, s.OrderQty
FROM Product p
INNER JOIN SalesOrderDetail s on p.ProductID = s.ProductID
--Version 2
SELECT p.Name, s.OrderQty
FROM Product p
INNER JOIN (SELECT ProductID, OrderQty FROM SalesOrderDetail) s on p.ProductID = s.ProductID
我听说(由 DBA)说版本 2 更快,因为它在内部 SELECT 语句中只获取查询所需的列。但这似乎没有意义,因为查询性能(据我所知)基于受影响的行数和返回的最终列列表。
两者的查询计划是相同的,所以我猜两者之间没有任何区别。
我说的对吗?
【问题讨论】:
-
解雇那个 DBA...
-
当然,他是不对的。我唯一的解释是他有这个观点,因为一些旧版本的 sql-server 或一些 SP 或 CU 甚至可能是另一个服务器。
-
实际上,在 MySql 中,这 可以 为真(子选择可以通过强制访问顺序从根本上提高性能)。可怕,我知道。以及为什么我会像瘟疫一样永远避免使用 MySql。
-
@ErikE:嗯。在讨论 SQL 时,MySql 确实总是很奇怪,不是吗? :-)
-
根据 PostgreSQL 9.5.6 的解释,
INNER JOIN table将获取所有列,而INNER JOIN (SELECT column1, column2, ...)将仅获取指定列并且数据宽度小于第一个列。但这仅适用于 PostgreSQL 9.5.6 而不是您的。解雇那个 DBA:P
标签: sql sql-server join inner-join