可能重复:
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;
谢谢
不,Oracle 接管并采取最快的方式,以防万一count(*)
这些将具有相同的性能。在大多数数据库中,count() 会导致扫描表或可用索引。是否使用索引而不是表仅取决于查询优化器。如果优化器足够聪明地使用索引,那么它在这两种情况下都应该足够聪明。
使用可用的元数据表,您通常可以比使用 count() 查询更有效地获取表中的行数。
我认为如果 id 是主键 count(*) 和 count(id) 在语义上是等效的。
但是对于读者来说 count(id)
意味着打算计算 id 不为空的所有行。为避免混淆,我宁愿使用 count(*)。