聚合函数的优化
发布时间: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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |