天萃荷净

select max(id),min(id) from table优化,分享开发DBA需求,在SQL语句查询最大值、最小值数据时的优化方式案例

1、查看数据库版本

SQL> select * from v$version where rownum<2;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

2、创建表和索引

create table t_a as select * from dba_objects;

create index t_a_ind on t_a(object_id);

3、查询最大值

SQL> select max(object_id) from t_a;

执行计划

———————————————————-

Plan hash value: 3226265922

————————————————————————————–

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

————————————————————————————–

| 0 | SELECT STATEMENT | | 1 | 13 | 2 (0)| 00:00:01 |

| 1 | SORT AGGREGATE | | 1 | 13 | | |

| 2 | INDEX FULL SCAN (MIN/MAX)| T_A_IND | 1 | 13 | 2 (0)| 00:00:01 |

————————————————————————————–

Note—— dynamic sampling used for this statement (level=2)

统计信息

———————————————————-

0 recursive calls

0 db block gets

2 consistent gets

0 physical reads

0 redo size

431 bytes sent via SQL*Net to client

416 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

1 rows processed

4、查询最小值

SQL> select min(object_id) from t_a;

执行计划

———————————————————-

Plan hash value: 3226265922

————————————————————————————–

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

————————————————————————————–

| 0 | SELECT STATEMENT | | 1 | 13 | 2 (0)| 00:00:01 |

| 1 | SORT AGGREGATE | | 1 | 13 | |

|

| 2 | INDEX FULL SCAN (MIN/MAX)| T_A_IND | 1 | 13 | 2 (0)| 00:00:01 |

————————————————————————————–

Note—— dynamic sampling used for this statement (level=2)

统计信息

———————————————————-

0 recursive calls

0 db block gets

2 consistent gets

0 physical reads

0 redo size

429 bytes sent via SQL*Net to client

416 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

1 rows processed

5、查询最大值和最小值

SQL> select max(object_id),min(object_id) from t_a;

执行计划

———————————————————-

Plan hash value: 2127980459

—————————————————————————

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

—————————————————————————

| 0 | SELECT STATEMENT | | 1 | 13 | 293 (1)| 00:00:04 |

| 1 | SORT AGGREGATE | | 1 | 13 | | |

| 2 | TABLE ACCESS FULL| T_A | 78093 | 991K| 293 (1)| 00:00:04 |

—————————————————————————

Note—— dynamic sampling used for this statement (level=2)

统计信息

———————————————————-

4 recursive calls

0 db block gets

1119 consistent gets

1044 physical reads

0 redo size

502 bytes sent via SQL*Net to client

416 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

1 rows processed

6、查询最大值和最小值(排除null)

SQL> select max(object_id),min(object_id) from t_a where object_id is not null;

执行计划

———————————————————-

Plan hash value: 1214261695

———————————————————————————

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time

|

———————————————————————————

| 0 | SELECT STATEMENT | | 1 | 13 | 50 (2)| 00:00:01

|

| 1 | SORT AGGREGATE | | 1 | 13 | |

|

|* 2 | INDEX FAST FULL SCAN| T_A_IND | 78093 | 991K| 50 (2)| 00:00:01

|

———————————————————————————

Predicate Information (identified by operation id):

—————————————————

2 – filter(“OBJECT_ID” IS NOT NULL)

Note—— dynamic sampling used for this statement (level=2)

统计信息

———————————————————-

4 recursive calls

0 db block gets

242 consistent gets

0 physical reads

0 redo size

502 bytes sent via SQL*Net to client

416 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

1 rows processed

7、分别查询最大值和最小值

SQL> select (select max(object_id) from t_a) max,(select min(object_id) from t_a) min from dual;

执行计划

———————————————————-

Plan hash value: 312201770

————————————————————————————–

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

————————————————————————————–

| 0 | SELECT STATEMENT | | 1 | | 2 (0)| 00:00:01 |

| 1 | SORT AGGREGATE | | 1 | 13 | |

| 2 | INDEX FULL SCAN (MIN/MAX)| T_A_IND | 1 | 13 | 2 (0)| 00:00:01 |

| 3 | SORT AGGREGATE | | 1 | 13 | |

| 4 | INDEX FULL SCAN (MIN/MAX)| T_A_IND | 1 | 13 | 2 (0)| 00:00:01 |

| 5 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |

————————————————————————————–

Note—— dynamic sampling used for this statement (level=2)

统计信息

———————————————————-

0 recursive calls

0 db block gets

4 consistent gets

0 physical reads

0 redo size

480 bytes sent via SQL*Net to client

416 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

1 rows processed

说明:

1、单查询最大值或者最小值,sql会自动走index

2、如果同时查询最大值和最小值,sql会使用全表扫描,而不是我们想象的索引快速扫描

3、加上where 排除掉null的情况,sql使用索引快速扫描,原因是:在不能确定索引列不为null(或者没有排除掉null)的情况下,不会使用索引快速扫描,而sql为了保证正确而采用了全表扫描

4、INDEX FULL SCAN (MIN/MAX)扫描效率很搞,所以把最大值,最小值分开查询,提高执行效率

5、其他写法

SQL> select (select /*+ index_asc(t_a t_a_ind) */ object_id from t_a where rownu

m=1) min ,(select /*+ index_desc(t_a t_a_ind) */ object_id from t_a where rownum=1)

max from dual;

执行计划

———————————————————-

Plan hash value: 674626822

—————————————————————————————

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

—————————————————————————————

| 0 | SELECT STATEMENT | | 1 | | 2 (0)| 00:

00:01 |

|* 1 | COUNT STOPKEY | | | | | |

| 2 | INDEX FULL SCAN | T_A_IND | 78093 | 991K| 2 (0)| 00:

00:01 |

|* 3 | COUNT STOPKEY | | | | |

| 4 | INDEX FULL SCAN DESCENDING| T_A_IND | 78093 | 991K| 2 (0)| 00:

00:01 |

| 5 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |

—————————————————————————————

Predicate Information (identified by operation id):

—————————————————

1 – filter(ROWNUM=1)

3 – filter(ROWNUM=1)

Note—— dynamic sampling used for this statement (level=2)

统计信息

———————————————————-

0 recursive calls

0 db block gets

4 consistent gets

0 physical reads

0 redo size

480 bytes sent via SQL*Net to client

416 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

1 rows processed

注意:

1)这个要正确执行,需要一个前提条件object_id这列要为not null限制条件,不然会hint提示无效

2)从执行计划的统计信息上看,这个和INDEX FULL SCAN (MIN/MAX)方式的执行效率一样

--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之学习笔记:Oracle优化 SQL查询最大值 最小值时的优化方法案例

oracle 最大值及其_学习笔记:Oracle优化 SQL查询最大值 最小值时的优化方法案例...相关推荐

  1. oracle拆分分区语法详解大全_学习笔记:Oracle分区表 添加 删除 合并 删除 交换 拆分等分区表的操作案例...

    天萃荷净 Oracle分区表管理,记录关于Oracle分区表的管理案例:创建.删除.合并.拆分.交换.更改分区表的操作方法 1.添加创建分区表 1.1)增加分区(add partition) 语法是: ...

  2. oracle如何往dg加盘_学习笔记:Oracle DG系统 主备库中表空间和数据文件增加删除等管...

    天萃荷净 Oracle Data Guard表空间和数据文件管理汇总 汇总日常工作中操作,在Oracle DG结构系统中,如何删除备库表空间和数据文件,如何管理主库与备库之间的文件系统,详见文章内容. ...

  3. oracle 删除awr报告,学习笔记:Oracle awr入门 深入了解AWR报告

    天萃荷净 深入了解AWR报告,ASH与AWR报告的官方说明,数据库进程和性能视图获取 1.AWR与ASH概念 1.ASH 若是一个普通的会话(我是指没有大量地耗费资源),则对于性能调整来说无足轻重.但 ...

  4. oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...

    天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...

  5. oracle 创建角色 权限设置,[学习笔记] Oracle创建用户、分配权限、设置角色,

    [学习笔记] Oracle创建用户.分配权限.设置角色, 创建用户 create user student --用户名 identified by "123456" --密码 de ...

  6. oracle的脚本日志,学习笔记:Oracle alert日志文件巡检脚本

    天萃荷净 分享一篇Oracle alert日志文件巡检脚本 每天都检查oracle日志,所以写了一个比较完善的shell,让其自动处理,在运行程序之前,需要在该脚本目录下新建tmp目录 #!/usr/ ...

  7. oracle rac 环境配置文件,学习笔记:Oracle RAC spfile参数文件配置案例详解

    天萃荷净 rac中的spfile探讨,记录一下Oracle RAC搭建完成后关于spfile参数文件的配置案例,与更改RAC环境中参数文件的方法 今天朋友的的rac,因为被同事做数据库升级,分别在两个 ...

  8. oracle常用数据统计,学习笔记:Oracle DBMS_STATS常用方法汇总 常用于收集统计oracle...

    天萃荷净 Oracle数据库中DBMS_STATS常用方法(收集oracle数据库.索引.表等信息) –收集Oracle数据库信息命令 EXEC DBMS_STATS.gather_database_ ...

  9. oracle数据变化记录,学习笔记:Oracle伪列函数ora_rowscn 记录表中行数据的修改时间...

    天萃荷净 Oracle数据库开发时使用伪列函数ora_rowscn查询出数据库表中行数据的修改时间 一.默认情况下 –创建t_orascn测试表 SQL> create table t_oras ...

最新文章

  1. MySQL 学习资料汇总
  2. 手把手教你React(一)JSX与虚拟DOM
  3. 基于8086CPU微处理器的汇编学习之段地址与偏移地址的分析
  4. ant 安装及基础教程 !
  5. [Study Notes][001][gstreamer] memory
  6. 中国双氢青蒿素市场趋势报告、技术动态创新及市场预测
  7. ffmpeg 转换VC工具 V1.1.1
  8. c语言数据结构练习复数操作
  9. Java基础编程题(一)——用冒泡排序法从大到小排序输入的4个数
  10. 推荐12个优秀的 HTML5 网站设计案例欣赏
  11. Mysql中查找附近人的查询语句
  12. 指针练习 - 使用指针找出函数中最大值和最小值
  13. 安卓获取手机视频和图片
  14. 简单七个步骤写一份策划方案(上)
  15. java计算机毕业设计冠军体育用品购物网站MyBatis+系统+LW文档+源码+调试部署
  16. 在 Arch Linux 上使用人脸识别(howdy)来登陆和认证
  17. 潜在解决方法-系统映像还原失败,找不到可用于恢复系统盘的磁盘
  18. JQuery动画基础:上卷下拉
  19. Arduino智能小车设计(七)
  20. Unity插件学习(五) ------ 本地存储Easy Save3

热门文章

  1. 1,日志组件XLog
  2. 在flash cs3场景中插入按钮以后,无法测试场景,删除按钮以后又可以测试?可能是按钮中某个帧上的文本对象的字体错了
  3. python matlabplot写字_Matlab中plot基本用法的具体使用
  4. 恩智浦智能车大赛2020_我院第十三届“恩智浦”杯智能车校内选拔赛宣讲会顺利举行...
  5. 数字通信同步技术的matlab与fpga实现_数字通信电缆行业规模情况及趋势分析(附报告目录)...
  6. tp5使用layui表格_tp5+layui增、删、改、查。
  7. order by 影响效率么_内存碎片对性能的潜在影响
  8. 2021第一波新年(春节)中国风插画设计,为年底储备素材
  9. 网络现代高科技人工智能宣传海报,没有脑洞怎么办,模板拿走
  10. UI实用素材|统计界面模板