[20231116]降序索引取最大值.txt --//链接https://jonathanlewis.wordpress.com/2023/11/01/descending-max/,提到降序索引取最大最小值走的是INDEX FAST FULL SCAN. --//我前面提过,许多场合下不需要建立降序索引,大部分普通索引都可以解决问题,我不像我以前系统建立一大堆降序索引.重复测试作者 --//的例子: 1.环境: SCOTT@book> @ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production create table t1 as select * from all_objects where rownum <= 10000; alter table t1 modify object_name not null; -- create index t1_i1a on t1(object_name); create index t1_i1d on t1(object_name desc); execute dbms_stats.gather_table_stats(user,'t1',cascade=>true) 2.测试: SCOTT@book> @ sl all alter session set statistics_level = all; Session altered. SCOTT@book> select max(object_name) from t1; MAX(OBJECT_NAME) ------------------------------ _utl$_lnc_ind_parts SCOTT@book> @ dpc '' '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID a5086qgsk6f7r, child number 0 ------------------------------------- select max(object_name) from t1 Plan hash value: 219064265 -------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers | -------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | | 13 (100)| | 1 |00:00:00.01 | 48 | | 1 | SORT AGGREGATE | | 1 | 1 | 19 | | | 1 |00:00:00.01 | 48 | | 2 | INDEX FAST FULL SCAN| T1_I1D | 1 | 10000 | 185K| 13 (0)| 00:00:01 | 10000 |00:00:00.01 | 48 | -------------------------------------------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$1 2 - SEL$1 / T1@SEL$1 --//作者给出了一个重写的sql语句,好像我以前也写过类似语句. SCOTT@book> select /*+ index(t1) */ utl_raw.cast_to_varchar2( sys_op_undescend( min(sys_op_descend(object_name)))) from t1; UTL_RAW.CAST_TO_VARCHAR2(SYS_OP_UNDESCEND(MIN(SYS_OP_DESCEND(OBJECT_NAME)))) ---------------------------------------------------------------------------- _utl$_lnc_ind_parts SCOTT@book> @ dpc '' '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID 8cqv0nbw9j5fn, child number 0 ------------------------------------- select /*+ index(t1) */ utl_raw.cast_to_varchar2( sys_op_undescend( min(sys_op_descend(object_name)))) from t1 Plan hash value: 2867767823 -------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers | -------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | | 44 (100)| | 1 |00:00:00.01 | 2 | | 1 | SORT AGGREGATE | | 1 | 1 | 20 | | | 1 |00:00:00.01 | 2 | | 2 | FIRST ROW | | 1 | 10000 | 195K| 44 (0)| 00:00:01 | 1 |00:00:00.01 | 2 | | 3 | INDEX FULL SCAN (MIN/MAX)| T1_I1D | 1 | 10000 | 195K| 44 (0)| 00:00:01 | 1 |00:00:00.01 | 2 | -------------------------------------------------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$1 3 - SEL$1 / T1@SEL$1 SCOTT@book> create index t1_i1a on t1(object_name); Index created. SCOTT@book> select max(object_name) from t1; MAX(OBJECT_NAME) ------------------------------ _utl$_lnc_ind_parts SCOTT@book> @ dpc '' '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID a5086qgsk6f7r, child number 0 ------------------------------------- select max(object_name) from t1 Plan hash value: 1421318352 ---------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers | Reads | ---------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | | 2 (100)| | 1 |00:00:00.01 | 2 | 1 | | 1 | SORT AGGREGATE | | 1 | 1 | 19 | | | 1 |00:00:00.01 | 2 | 1 | | 2 | INDEX FULL SCAN (MIN/MAX)| T1_I1A | 1 | 1 | 19 | 2 (0)| 00:00:01 | 1 |00:00:00.01 | 2 | 1 | ---------------------------------------------------------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$1 2 - SEL$1 / T1@SEL$1
[20231116]降序索引取最大值.txt
来源:这里教程网
时间:2026-03-03 19:01:30
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 读懂搜狐财报里的“生长密码”
读懂搜狐财报里的“生长密码”
26-03-03 - oracle查询sql执行耗时、执行时间、sql_id
oracle查询sql执行耗时、执行时间、sql_id
26-03-03 - Oracle Exadata简介
Oracle Exadata简介
26-03-03 - PC产业岔路口:传统PC唱罢,AI PC登场
PC产业岔路口:传统PC唱罢,AI PC登场
26-03-03 - 甲骨文:AI驱动的复兴之路
甲骨文:AI驱动的复兴之路
26-03-03 - 优必选、小鹏、小米,人形机器人“奋勇争先”
优必选、小鹏、小米,人形机器人“奋勇争先”
26-03-03 - 阿里大文娱整合背后,行业产业化周期正式开启
阿里大文娱整合背后,行业产业化周期正式开启
26-03-03 - 记一次rac TNS-12541,ORA-12520,ORA-12521 错误处理
- ORA-02354 ORA-01555 ORA-22924
ORA-02354 ORA-01555 ORA-22924
26-03-03 - 修改主机时区对Oracle的影响分析
修改主机时区对Oracle的影响分析
26-03-03
