【发布时间】:2011-09-25 07:22:29
【问题描述】:
我在 MSSQL2008 中运行这样的查询:
select count(*)
from t1
inner join t2 on t1.id = t2.t1_id
inner join t3 on t1.id = t3.t1_id
假设t1.id 有一个NOT NULL 约束。由于它们是内部连接并且t1.id 永远不能为空,因此使用count(t1.id) 而不是count(*) 应该会产生完全相同的最终结果。我的问题是:性能会一样吗?
我也想知道连接是否会影响这一点。我意识到添加或删除连接会影响性能和结果集的长度。假设在不更改连接模式的情况下,您将count 设置为仅针对一个表。会有什么不同吗?也就是说,这两个查询有区别吗:
select count(*) from t1 inner join t2 on t1.id = t2.t1_id
select count(t1.*) from t1 inner join t2 on t1.id = t2.t1_id
COUNT(id) vs. COUNT(*) in MySQL 为 MySQL 回答了这个问题,但我找不到专门针对 MS-SQL 的答案,而且我根本找不到任何考虑到join 因素的东西。
注意:我试图在 Google 和 SO 上都找到此信息,但很难弄清楚如何对我的搜索进行措辞。
【问题讨论】:
标签: performance sql-server-2008 join count