聚合函数的优化

前端之家收集整理的这篇文章主要介绍了聚合函数的优化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
--创建测试表和索引
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;
原文链接:https://www.f2er.com/javaschema/285737.html

猜你在找的设计模式相关文章