一、什么是执行计划 所谓执行计划,就是在执行一个SQL前,做出的一份数据库认为最佳的方案。好比在北京上班,是做地铁去还是公交车亦或开车自驾等等。如果做地铁,需要从哪儿换成之类的,... ...从各种方案中选择一个自认为最佳的方案。这个方案在数据库里面即为执行计划。己认为最合适的方案。 二、解析的概念 解析就是为sql生成执行计划的过程。解析分为软解析和硬解析。 三、统计信息与动态采样 统计信息的作用就是为解析sql提供的数据支持,也就是为了更好的选择执行计划。简单说就是统计信息反映表中数据分布的情况。 如果统计信息没有收集,数据库在解析sql的过程中会根据一定的比例去表中采样,采样的结果作为sql执行路径所需代价的依据。这就是动态采样。 四、NULL这个特殊的东西 NULL是个特殊的一个存在。 从定义上来讲,NULL就是一个不确定的数据。所以无论对NULL做任何操作,结果还是NULL。 另外,对于oracle数据库来说,索引里面没有null,索引里面没有NULL会有什么影响呢?哈哈,见“索引快速全扫描”部分。 五、索引相关执行计划(补充索引选择性的概念) 1 全表扫描(full table scan) 1) 测试数据 create table t1 as select * from dba_objects; 2)看执行计划 explain plan for select * from t1 where t1.object_id=19791; select * from table(dbms_xplan.display()); 3)注意动态采样与filter 2 索引唯一扫描(index unique scan) 1)创建唯一性索引 create unique index t1_objectid on t1(object_id); 2)收集统计信息 exec dbms_stats.gather_table_stats('ZQ','T1',cascade=>true); 3) 查看执行计划 explain plan for select * from t1 where t1.object_id=19791; select * from table(dbms_xplan.display()); 4)注意动态采样的消失与access 3 索引范围扫描(index range scan) 1)测试数据 create table t2 as select * from dba_objects; 2) 创建非唯一性索引 create index t2_objectid on t2(object_id); 3) 收集统计信息 exec dbms_stats.gather_table_stats('ZQ','T2',cascade=>true); 4)查看执行计划 explain plan for select * from t2 where t2.object_id=19791; select * from table(dbms_xplan.display()); 5)查看执行计划 explain plan for select * from t1 where t1.object_id>131790; select * from table(dbms_xplan.display()); 4 索引快速全扫描(index fast full scan) 1) 查看执行计划 explain plan for select /*+index(t2 t2_objectid)*/object_id from t2 order by object_id; select * from table(dbms_xplan.display()); --走全表扫描 insert into t2 select * from t2; commit; insert into t2 select * from t2; commit; 2) 收集统计信息,然后看执行计划 exec dbms_stats.gather_table_stats('ZQ','T1',cascade=>true); explain plan for select object_id from t2 order by object_id; select * from table(dbms_xplan.display()); --走全表扫描 3) 创建组合索引,并收集统计信息 create index t2_id_name on t2(object_id,object_name); exec dbms_stats.gather_table_stats('ZQ','T2',cascade=>true); explain plan for select object_id,object_name from t2; select * from table(dbms_xplan.display()); --走全表扫描 explain plan for select /*+index(t2,t2_id_name)*/object_id,object_name from t2; select * from table(dbms_xplan.display()); ---------------------为啥,哈哈哈哈哈哈,not null 4) object_id字段设置成not Null,走索引快速扫描 alter table t2 modify object_id not null; explain plan for select /*+index(t2,t2_id_name)*/object_id,object_name from t2; select * from table(dbms_xplan.display()); 4) 使用count,索引全扫描 explain plan for select count(object_id) from t2 ; select * from table(dbms_xplan.display()); 5 索引全扫描(index full scan) 1)查看执行计划 explain plan for select t1.object_id from t1 order by t1.object_id; select * from table(dbms_xplan.display()); --注意索引快速全扫描无序,索引全扫描有序
oracle理解执行计划之索引相关
来源:这里教程网
时间:2026-03-03 12:43:18
作者:
编辑推荐:
- oracle理解执行计划之索引相关03-03
- Word文档中怎么插入分页符03-03
- 第一篇博客-控制文件损坏,使用备份二进制控制文件恢复03-03
- Word特定区域背景填充怎么操作03-03
- 不惧bug!一个oracle bug的分析和规避--技术人生系列第五十四期-我和数据中心的故事03-03
- Word文档中怎样快速绘制分隔线03-03
- 怎样在Word文档中文字设置超链接03-03
- Word文档中如何制作座位表03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 不惧bug!一个oracle bug的分析和规避--技术人生系列第五十四期-我和数据中心的故事
- Windows平台下opatch apply报错:OUI-67073
Windows平台下opatch apply报错:OUI-67073
26-03-03 - 配置ASM以及创建恢复目录
配置ASM以及创建恢复目录
26-03-03 - oracle 12c 新增的诊断事件的初步尝试
oracle 12c 新增的诊断事件的初步尝试
26-03-03 - 在Word上如何设置只关闭当前窗口
在Word上如何设置只关闭当前窗口
26-03-03 - 数据库大版本升级27个约束消失之谜--技术人生系列第五十二期-我和数据中心的故事
- 这不仅仅是SQL优化!!--技术人生系列第五十五期-我和数据中心的故事
这不仅仅是SQL优化!!--技术人生系列第五十五期-我和数据中心的故事
26-03-03 - 发现隐患,就在上线前 --技术人生系列第五十三期-我和数据中心的故事
发现隐患,就在上线前 --技术人生系列第五十三期-我和数据中心的故事
26-03-03 - ORACLE问题分析过程中的“暴力美学”--技术人生系列第五十六期--我和数据中心的故事
- Debian NTP服务器配置(手把手教你搭建Linux时间同步服务)
Debian NTP服务器配置(手把手教你搭建Linux时间同步服务)
26-03-03
