加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

聚合函数的优化

发布时间:2020-12-13 23:12:55 所属栏目:百科 来源:网络整理
导读:--创建测试表和索引 drop table t purge; create table t as select * from dba_objects; create index idx_object_id on t(object_id); --全表扫描TABLE ACCESS FULL select count(*) from t; --索引扫描INDEX FAST FULL SCAN,加上非空判断之后,就会走索
--创建测试表和索引
drop table t purge;
create table t as select * from dba_objects;
create index idx_object_id on t(object_id);

--全表扫描TABLE ACCESS FULL
select count(*) from t;

--索引扫描INDEX FAST FULL SCAN,加上非空判断之后,就会走索引扫描了
select count(*) from t where object_id is not null;

--为了避免这种蹩脚的写法,可以将该列设置为非空,或者设置为主键

--在使用类似于avg或者sum函数的时候,如果走索引也应该设置为非空
select avg(object_id) from t where object_id is not null;

--对于这条语句的执行效率和分开执行的效率是一致的
select avg(object_id),sum(object_id),count(*) from t where object_id is not null;

--对于max和min,只要有索引列,max和min无需设置非空,即可快速完成查询。使用的扫描方式是INDEX FULL SCAN,这种速度是非常快的
select max(object_id) from t;

--把两个放在一块写的时候就会换一种扫描方式INDEX FAST FULL SCAN,这样速度就会慢很多
select max(object_id),min(object_id) from t

--对于这种情况可以使用,这是对表进行INDEX FULL SCAN,执行的复杂度是单独执行的两倍,但是就这也比上面的情况快很多
select a.max,b.min from (select max(object_id) max from t) a,(select min(object_id) min from t) b;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读