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)效率更高?

mysql count(*)和count(列)速率

笔记Mysql中的count效率

为啥 dataset.count() 比 rdd.count() 快?

纳尼?MySQL 中 count(*) 比 count 快?

“SELECT COUNT(column)”是不是比“SELECT COUNT(*)”快/慢? [复制]