【发布时间】:2012-06-08 18:52:19
【问题描述】:
可能重复:
Count(*) vs Count(1)
如果我有一个表,'id'是主键,那么这两个命令有不同的性能吗?
select count(*) from t;
select count(id) from t;
谢谢
【问题讨论】:
-
查询优化器告诉你什么?
可能重复:
Count(*) vs Count(1)
如果我有一个表,'id'是主键,那么这两个命令有不同的性能吗?
select count(*) from t;
select count(id) from t;
谢谢
【问题讨论】:
这些将具有相同的性能。在大多数数据库中,count() 会导致扫描表或可用索引。是否使用索引而不是表仅取决于查询优化器。如果优化器足够聪明地使用索引,那么它在这两种情况下都应该足够聪明。
使用可用的元数据表,您通常可以比使用 count() 查询更有效地获取表中的行数。
【讨论】:
不,Oracle接管并采取最快的方式,以防count(*)
【讨论】:
我认为如果 id 是主键 count(*) 和 count(id) 在语义上是等效的。
但对于读者 count(id) 表示打算计算 id 不为空的所有行。为避免混淆,我宁愿使用 count(*)。
【讨论】: