所以我在桌子上执行了这个查询:
EXPLAIN SELECT COUNT(*) FROM table;
并且输出中的“rows”列显示为NULL(通常它会显示查询经过的行数)...
这是否意味着COUNT命令是瞬时的,因此不需要通过任何行?
答案 0 :(得分:4)
如果您的表使用MyISAM
存储引擎,那么是,该查询会在固定时间内解析。行计数是表元数据的一部分,表本身不必检查。
答案 1 :(得分:0)
许多数据库引擎使用index scan来获取计数。如果您正在使用MyISAM(非常可能),它只会读取引擎索引中的数字并返回它。几乎是瞬间的。
InnoDB does a full table scan,因此它几乎总是比使用表索引的引擎慢(除非您将查询与WHERE
子句进行比较。
答案 2 :(得分:0)
来自:http://www.wikivs.com/wiki/MySQL_vs_PostgreSQL#COUNT.28.2A.29
根据您使用的引擎,我猜它是MyISAM,执行快速索引计数而不是实际计算所有行。