18.读书笔记收获不止Oracle之 索引SUM和AVG优化
来源:互联网 发布:平安银行java外包 编辑:程序博客网 时间:2024/04/25 23:24
18.读书笔记收获不止Oracle之 索引SUM和AVG优化
看下索引在sum()和avg之类的聚合语句中的优化。
drop table t purge;
SQL> set timing off
SQL> set autotrace off
SQL> create table t as select * from dba_objects;
SQL> create index idx1_object_id on t(object_id);
使用了SUM看看
Set autotrace on
Set linesize 1000
Set timing on
Select sum(object_id) from t;
SUM(OBJECT_ID)
--------------
4246036815
Elapsed: 00:00:00.06
Execution Plan
----------------------------------------------------------
Plan hash value: 1296839119
----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------
| 0| SELECT STATEMENT | | 1 | 5 | 57 (0)| 00:00:01 |
| 1| SORT AGGREGATE | | 1 | 5 | | |
| 2| INDEX FAST FULL SCAN| IDX1_OBJECT_ID | 91717| 447K| 57 (0)| 00:00:01 |
----------------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
1 recursive calls
0 dbblock gets
211 consistent gets
203 physical reads
0 redosize
552 bytes sent via SQL*Net to client
551 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rowsprocessed
Database 12c 直接使用 索引了,没有进行全表扫描。因为列有空值不影响在索引中进行SUM和AVG运算的,所以优化器直接进行了优化。
一个SUM使用了211次逻辑读。
1. SUM和AVG的经典语法
SQL> select sum(object_id),avg(object_id),count(*) from t;
SUM(OBJECT_ID) AVG(OBJECT_ID) COUNT(*)
-------------- -------------- ----------
4246036815 46294.9815 91717
Elapsed: 00:00:00.21
Execution Plan
----------------------------------------------------------
Plan hash value: 2966233522
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0| SELECT STATEMENT | | 1 | 5| 429 (1)| 00:00:01 |
| 1| SORT AGGREGATE | | 1 | 5 | | |
| 2| TABLE ACCESS FULL| T | 91717 | 447K| 429 (1)| 00:00:01 |
---------------------------------------------------------------------------
Statistics
----------------------------------------------------------
1 recursive calls
0 dbblock gets
1542 consistent gets
1539 physical reads
0 redosize
725 bytes sent via SQL*Net to client
551 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rowsprocessed
SQL> select sum(object_id),avg(object_id),count(*) from t where object_id is not null;
SUM(OBJECT_ID) AVG(OBJECT_ID) COUNT(*)
-------------- -------------- ----------
4246036815 46294.9815 91717
Elapsed: 00:00:00.02
Execution Plan
----------------------------------------------------------
Plan hash value: 1296839119
----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------
| 0| SELECT STATEMENT | | 1 | 5 | 57 (0)| 00:00:01 |
| 1| SORT AGGREGATE | | 1 | 5 | | |
|* 2| INDEX FAST FULL SCAN| IDX1_OBJECT_ID | 91717| 447K| 57 (0)| 00:00:01 |
----------------------------------------------------------------------------------------
Predicate Information (identified byoperation id):
---------------------------------------------------
2- filter("OBJECT_ID" IS NOT NULL)
Statistics
----------------------------------------------------------
1 recursive calls
0 dbblock gets
211 consistent gets
0 physical reads
0 redosize
725 bytes sent via SQL*Net to client
551 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rowsprocessed
这个COUNT(*),SUM,AVG连续三个聚合语句写在一起,逻辑读和单个SUM运算性能一样都是221个逻辑读。因为一次扫描索引块可以同时解决三个问题。
- 18.读书笔记收获不止Oracle之 索引SUM和AVG优化
- 19.读书笔记收获不止Oracle之 索引MAX和MIN优化
- 20.读书笔记收获不止Oracle之 索引回表和优化
- 14.读书笔记收获不止Oracle之 索引
- 《收获,不止Oracle》读书笔记(一):索引优化
- 12.读书笔记收获不止Oracle之 索引分区表
- 15.读书笔记收获不止Oracle之 索引高度
- 16.读书笔记收获不止Oracle之 分区索引
- 17.读书笔记收获不止Oracle之 索引存储列值
- 21.读书笔记收获不止Oracle之 索引回表效率
- 22.读书笔记收获不止Oracle之 索引特性活用
- 23.读书笔记收获不止Oracle之 组合索引
- 24.读书笔记收获不止Oracle之 索引的危害
- 25.读书笔记收获不止Oracle之 位图索引
- 26.读书笔记收获不止Oracle之 位图索引即席查询
- 27.读书笔记收获不止Oracle之 位图索引更新
- 28.读书笔记收获不止Oracle之 函数索引
- 【读书笔记】【收获,不止Oracle】索引组织表
- 使用docker过程中遇到的问题
- (二)连续傅里叶变换与离散傅里叶变换:傅里叶变换(Continuous Time Fourier Transform)
- c++常见面试题总结
- Maven从零开始
- 6.2(2)
- 18.读书笔记收获不止Oracle之 索引SUM和AVG优化
- ubuntu安装nginx
- mybatis配置
- Python pillow Image图像处理
- 分割字符串+回溯总结
- MacOS 下编译工具链
- PAT --- 1023. 组个最小数 (20)
- 【数据分析】目标优化矩阵表确定权重
- 19.读书笔记收获不止Oracle之 索引MAX和MIN优化