一、没建索引一样快
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(*)最快。
原文地址:https://www.cnblogs.com/fjzsl/p/9291942.html
时间: 2024-10-15 08:20:47