count(*)快还是count(列)快
Posted fjzsl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了count(*)快还是count(列)快相关的知识,希望对你有一定的参考价值。
一、没建索引一样快
create table t as select * from dba_objects;
update t set object_id =rownum ;
此时没建索引,因此他们是一样快。
select count(*) from t;
select count(object_id) from t;
二、为列object_id创建索引
create index idx_object_id on t(object_id);
此时count(object_id)比count(*)快很多
三、修改列object_id,设置不允许为空
alter table T modify object_id not null;
此时count(object_id)和count(*)一样快。
四、最佳字段顺序(越往后的列访问CPU开销大)
给我们开发员的启示就是:把最常用的列建在最前面。不常用的列建在后面。
优化器是这么搞的:列的偏移量决定性能,列越靠后,访问的开销越大。由于count(*)的算法与列偏移量无关,所以count(*)最快。
以上是关于count(*)快还是count(列)快的主要内容,如果未能解决你的问题,请参考以下文章
Mysql 用SELECT count(*)效率高还是SELECT count(1)效率更高?
为啥 dataset.count() 比 rdd.count() 快?