一、什么是执行计划

所谓执行计划,就是在执行一个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执行计划没有执行索引,oracle理解执行计划之索引相关相关推荐

  1. 对数据库索引的理解及适合建立索引的字段

    因本人小白,总结一下别人总结的,勿怪勿怪.转载深入浅出数据库索引原理,哪些字段适合建立索引 问题 为什么要给表加上主键? 为什么加索引后会使查询变快? 为什么加索引后会使写入.修改.删除变慢? 什么情 ...

  2. MySQL索引的理解学习,面试不问索引原理就是事务原理

    目录 MySQL执行SQL的整体流程 引言, MySQL索引底层学习原因 磁盘介绍(理解磁盘IO) 索引底层数据结构B+树 B+树(聚集索引) B+树(辅助索引) 思考一下为何使用B+树结构, 不是B ...

  3. oracle sql 执行计划分析_从Oracle数据库实验来看索引的常见执行计划

    概述 今天主要介绍下Oracle索引的常见执行计划: INDEX FULL SCAN:索引的全扫描,单块读,有序 INDEX RANGE SCAN:索引的范围扫描 INDEX FAST FULL SC ...

  4. oracle for循环_浅谈Oracle的执行计划

    执行计划执行计划是一条sql语句在ORACLE中的执行过程或访问路径的描述.即对一个sql语句,从执行计划可以看出oracle完成任务的详细方案.如果要分析某条SQL的性能问题,通常我们要先看SQL的 ...

  5. 来来来!一次搞定各种数据库 SQL 执行计划:MySQL、Oracle

    执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序等.如果 SQL 语句性能 ...

  6. oracle执行计划耗费 基数 字节,Oracle 查看执行计划

    一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二:怎样查看Oracle执行计划? 这里以PLSQL为例: ①:配置执行计划需要显示的项: 工具  ...

  7. Oracle调优之看懂Oracle执行计划

    1.文章写作前言简介 之前曾经拜读过<收获,不止sql调优>一书,此书是国内DBA写的一本很不错的调优类型的书,是一些很不错的调优经验的分享.虽然读了一遍,做了下读书笔记,觉得很有所收获, ...

  8. Oracle总结(一):Oracle执行计划

    看懂Oracle执行计划 最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 1.什么是Oracle执行计划? 执行计划是一条查询语句在Or ...

  9. oracle 从执行计划的预估行数看执行计划是否正确

    oracle 从执行计划的预估行数看执行计划是否正确 从执行计划的预估行数可以看出执行计划是否正确,作为优化的你曾经注意到了么? 今天在监控系统垃圾sql语句的时候发现一个sql语句跑了10个小时了, ...

最新文章

  1. 看看那些令你惊叹的PCB设计艺术
  2. SpringBoot + Mybatis + Druid + PageHelper 实现多数据源分页
  3. DevExpress v17.2新版亮点——CodeRush篇(二)
  4. javascript设计模式-学习笔记
  5. python三层设计_python 三层架构说明
  6. OpenARK:惊艳的增强现实、虚实交互开源库
  7. Linux各目录详解
  8. C语言结构体(struct)类型的各种用法
  9. 对if...else if...的理解
  10. 【宝塔】【cloudreve】挂载阿里云OSS到ECS服务器内网上
  11. 解题报告:LeetCode Basic Calculator(简单计算器)
  12. SoftCnKiller高速下载器捆绑软件杀手
  13. 7月SCI/SSCI期刊变动,警惕这5本被剔除
  14. 2022第四届中国制造业数字化转型国际峰会
  15. 手机远程唤醒 android,手机微信实现网络唤醒电脑(WOL),远程开机,WakeOnLan – 全栈笔记...
  16. python中不同文件之间使用所谓的全局变量
  17. 读书百客:《感遇·江南有丹橘》赏析
  18. 这可能是京东考前焦虑最重的一次618
  19. IO、BIO、NIO、AIO
  20. 指针详讲(一阶指针和二阶指针等指针各种用法详解)

热门文章

  1. flex 布局,flex-grow 宽度未等比放大问题解决办法
  2. ORA-06413连接未打开的错误的原因和解决方法
  3. 【干货】华为企业数字化转型之道.pdf(附下载链接)
  4. 2021年营销数智化趋势洞察报告:深链经营孕育品牌发展新商机.pdf(附下载链接)...
  5. 【报告分享】德勤-教育行业发展报告(政策、资本、AI、职业教育).pdf2019年中国外卖产业调查研究报告.pdf...
  6. Attention is all you need注意力机制代码解析
  7. CTR学习笔记代码实现1-深度学习的前奏LR-FFM
  8. 华为P20云文档空间满了怎么清理_原来华为手机能这样清理垃圾,怪不得别人的手机再用两年不卡顿...
  9. pph上传文件到window服务器,[upload_labs]文件上传绕过小结
  10. Leetcode每日一题:183.customers-who-never-order(从不订购的客户)