oracle执行计划没有执行索引,oracle理解执行计划之索引相关
一、什么是执行计划
所谓执行计划,就是在执行一个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理解执行计划之索引相关相关推荐
- 对数据库索引的理解及适合建立索引的字段
因本人小白,总结一下别人总结的,勿怪勿怪.转载深入浅出数据库索引原理,哪些字段适合建立索引 问题 为什么要给表加上主键? 为什么加索引后会使查询变快? 为什么加索引后会使写入.修改.删除变慢? 什么情 ...
- MySQL索引的理解学习,面试不问索引原理就是事务原理
目录 MySQL执行SQL的整体流程 引言, MySQL索引底层学习原因 磁盘介绍(理解磁盘IO) 索引底层数据结构B+树 B+树(聚集索引) B+树(辅助索引) 思考一下为何使用B+树结构, 不是B ...
- oracle sql 执行计划分析_从Oracle数据库实验来看索引的常见执行计划
概述 今天主要介绍下Oracle索引的常见执行计划: INDEX FULL SCAN:索引的全扫描,单块读,有序 INDEX RANGE SCAN:索引的范围扫描 INDEX FAST FULL SC ...
- oracle for循环_浅谈Oracle的执行计划
执行计划执行计划是一条sql语句在ORACLE中的执行过程或访问路径的描述.即对一个sql语句,从执行计划可以看出oracle完成任务的详细方案.如果要分析某条SQL的性能问题,通常我们要先看SQL的 ...
- 来来来!一次搞定各种数据库 SQL 执行计划:MySQL、Oracle
执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序等.如果 SQL 语句性能 ...
- oracle执行计划耗费 基数 字节,Oracle 查看执行计划
一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二:怎样查看Oracle执行计划? 这里以PLSQL为例: ①:配置执行计划需要显示的项: 工具 ...
- Oracle调优之看懂Oracle执行计划
1.文章写作前言简介 之前曾经拜读过<收获,不止sql调优>一书,此书是国内DBA写的一本很不错的调优类型的书,是一些很不错的调优经验的分享.虽然读了一遍,做了下读书笔记,觉得很有所收获, ...
- Oracle总结(一):Oracle执行计划
看懂Oracle执行计划 最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 1.什么是Oracle执行计划? 执行计划是一条查询语句在Or ...
- oracle 从执行计划的预估行数看执行计划是否正确
oracle 从执行计划的预估行数看执行计划是否正确 从执行计划的预估行数可以看出执行计划是否正确,作为优化的你曾经注意到了么? 今天在监控系统垃圾sql语句的时候发现一个sql语句跑了10个小时了, ...
最新文章
- 看看那些令你惊叹的PCB设计艺术
- SpringBoot + Mybatis + Druid + PageHelper 实现多数据源分页
- DevExpress v17.2新版亮点——CodeRush篇(二)
- javascript设计模式-学习笔记
- python三层设计_python 三层架构说明
- OpenARK:惊艳的增强现实、虚实交互开源库
- Linux各目录详解
- C语言结构体(struct)类型的各种用法
- 对if...else if...的理解
- 【宝塔】【cloudreve】挂载阿里云OSS到ECS服务器内网上
- 解题报告:LeetCode Basic Calculator(简单计算器)
- SoftCnKiller高速下载器捆绑软件杀手
- 7月SCI/SSCI期刊变动,警惕这5本被剔除
- 2022第四届中国制造业数字化转型国际峰会
- 手机远程唤醒 android,手机微信实现网络唤醒电脑(WOL),远程开机,WakeOnLan – 全栈笔记...
- python中不同文件之间使用所谓的全局变量
- 读书百客:《感遇·江南有丹橘》赏析
- 这可能是京东考前焦虑最重的一次618
- IO、BIO、NIO、AIO
- 指针详讲(一阶指针和二阶指针等指针各种用法详解)
热门文章
- flex 布局,flex-grow 宽度未等比放大问题解决办法
- ORA-06413连接未打开的错误的原因和解决方法
- 【干货】华为企业数字化转型之道.pdf(附下载链接)
- 2021年营销数智化趋势洞察报告:深链经营孕育品牌发展新商机.pdf(附下载链接)...
- 【报告分享】德勤-教育行业发展报告(政策、资本、AI、职业教育).pdf2019年中国外卖产业调查研究报告.pdf...
- Attention is all you need注意力机制代码解析
- CTR学习笔记代码实现1-深度学习的前奏LR-FFM
- 华为P20云文档空间满了怎么清理_原来华为手机能这样清理垃圾,怪不得别人的手机再用两年不卡顿...
- pph上传文件到window服务器,[upload_labs]文件上传绕过小结
- Leetcode每日一题:183.customers-who-never-order(从不订购的客户)