1、相关概念介绍

统计信息:描述数据库中表,索引的大小,规模,数据分布状况等的一类信息。
执行计划:一条查询语句在Oracle中的执行过程或访问路径的描述,即执行查询语句的逻辑或方式
HINT:开发人员控制执行计划的接口,可以给sql语句执行具体的执行计划

2、详细介绍

Oracle在执行查询语句的时候,会根据统计信息对sql进行评估,选择出最有的执行计划去执行sql语句。所以是否选择使用索引,和统计信息有关。

2.1、统计信息

1、统计信息在工作日22:00-02:00会更新,双休日可能全天统计
2、执行查询时,数据库会根据统计信息评估,选择出相应的执行计划

2.2、执行计划

2.3、索引(B树)

索引建立后,会生成一个索引表,使索引和表中数据形成映射;若表中的数据有更新而影响到了索引,那么索引表则要重新生成,所以索引不利于插入、变更频繁的表。

INDEX RANGE SCAN 范围扫描

首先定位初始位置,然后向后遍历,查询出所有附和条件的索引

INDEX FULL SCAN 索引全扫描

一般在统计表数据总条数时使用

注意点
单列索引不存储null,
多列索引允许存储null,但是不可以全部为null

2.4、表连接算法

2.4.1、Next Loop

缺点:无索引的情况下,表过大,不可用
适用于OLTP类型的交易,返回处理少量的数据

算法结构:For I in (    语句1)
Do语句2
done
2.4.2、Hash Join

适用于OLAP型交易,返回或处理大量数据

缺点:第一张表的关联值过多的相同,消耗CPU

原理步骤:
1、先访问table1,按表关联字段进行hash算法例如:取余(id为连接字段)若mod(table1.id, 1000) = 1,放在第1个桶中若mod(table1.id, 1000) = 2,放在第2个桶中若mod(table1.id, 1000) = 3,放在第3个桶中…………………………2、访问table2,按照同样的规则,与对应桶中的记录进行比较,相同,即关联上

2.5、简单案例

场景介绍
第一天:创建table,插入200W条数据,查询正常,20:00使用delete删除表中的所有记录
第二天:插入200W条数据,查询时,速度相较于第一天很慢(数量级上的差别)

分析
第一天:由于表刚创建,所以table的统计信息为null,所以评估执行计划时,没有依据统计信息
当天的22:00-02:00,更新table的统计信息,所以对应的统计信息变为数据行数0

第二天,插入200W条数据后,执行查询时,数据库进行评估时,认为table中的行数为0,所以选择出了较为低效率的执行计划,才会出现上述情况

3、Oracle结构(补充)

图解
Database: 数据库

Tablespace:表空间是一个逻辑容器,它和数据文件关联起来,一个表空间至少有一个数据文件与之关联。一个表空间可以有多个段,一个段只能属于一个表空间。
Segment:段,是一种在数据库中消耗物理存储空间的任何实体(一个段可能存在于多个数据文件中, 因为物理的数据文件 是组成逻辑表空间的基本物理存储单位)如果一个表不进行分区,那么一个表就是在一个segment中。如果一个表进行多个分区,那么每一个分区就在一个segment。

Block:块,Oracle存储的最基本单位,由DB_BLOCK_SIZE制定,通常为8KB,也可以定义为2KB,4KB,16KB,32KB,64KB等,磁盘最小存储单位是sector(512BYTE 操作系统概念),Oracle数据块由连续的sector组成,Oracle读写单位是数据块,应尽量设置BLOCK大小为磁盘数据块大小的整数倍,避免IO浪费

Extent:区又叫盘区,是数据文件中一个连续的分配空间,它比块要大,由块组成。有些对象分配空间时可能至少需要两个盘区,比如回滚段,而这两个盘区不一定要求相连。区的大小从一个块到2GB不等

oracle中存储的层次结构总结如下

1、数据库由一个或多个表空间组成
2、Tablespace可以理解为segments的逻辑容器(包含多个段),由一个或多个数据文件组成
3、Segment是db对象占有空间的最小单位,一个对象可以包含0个、1个或多个segment,段由一个或多个区组成
4、Extent是数据文件中一个连续的分配空间,由一个或多个块组成。Extent是空间分配的最小单位,oracle都是以extent为单位为对象分配空间的
5、Block块是数据库中最小、最基本的空间单位,是数据库使用的最小的I/O单元,数据的读取都是以block的整数倍进行的,通常一个db block通常是一个os block的整数倍大小
6、Schema可以理解为用户下的所有对象的集合,每个用户都有一个对应的方案

Oracle数据库索引原理分析相关推荐

  1. 资源放送丨《Oracle数据库索引分裂详解》PPT视频

    点击上方"蓝字" 关注我们,享更多干货! 前段时间,墨天轮邀请数据库资深专家 孙加鹏 老师分享了<Oracle数据库索引分裂详解>,在这里我们将课件PPT和实况录像分享 ...

  2. 本周两场直播丨通过源码了解openGauss多线程架构;Oracle数据库索引分裂详解。...

    1.管中窥豹之通过源码了解openGauss多线程架构-8月18日20:00 本讲座主要介绍openGauss的多线程架构,通过源码了解线程间通信机制.线程池的原理和优势.如何开启线程池等,力图通过多 ...

  3. 简述oracle的主要数据库对象,Oracle数据库数据对象分析

    Oracle数据库数据对象分析 Oracle数据库数据对象中最基本的是表和视图,其他还有约束.序列.函数.存储过程.包.触发器等.对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数 ...

  4. 面试题之数据库索引原理

    面试题 某年某月某日,在求职面试的过程中被多家公司问及数据库的索引问题,问题如下: 1.你有了解索引吗? 2.你知道索引的具体实现原理吗? 3.你知道索引的数据结构是什么吗? 俗话说,初生牛犊不怕虎, ...

  5. B-treeB+tree数据库索引原理

    B-tree&B+tree:https://www.cnblogs.com/vianzhang/p/7922426.html 数据库索引原理:https://www.cnblogs.com/a ...

  6. oracle数据库索引介绍,SQL Server和Oracle数据库索引介绍

    SQL Server和Oracle数据库索引介绍 SQL Server 和 Oracle 数据库索引介绍1 SQL Server 中的索引 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行 ...

  7. oracle数据库索引

    oracle数据库索引 1.b-tree索引 2.位图索引 3.函数索引 3.哈希索引:不适合模糊查询和范围查询(包括like,>,<,between--and等),由于 Hash 索引比 ...

  8. 2016年度中国Oracle数据库使用现状分析报告

    云和恩墨旗下智能诊断平台Bethune今日发布了[2016年度中国Oracle数据库使用现状分析报告],该报告采样2016年度国内18个大行业.485位用户(个人/企业)的1841套Oracle数据库 ...

  9. mysql中10049是什么错误_【学习笔记】Oracle数据库10049用于分析SQL解析笔记案例

    [学习笔记]Oracle数据库10049用于分析SQL解析笔记案例 时间:2016-11-05 13:54   来源:Oracle研究中心   作者:HTZ   点击: 次 天萃荷净 Oracle研究 ...

  10. 【MySQL】数据库索引原理 | 索引数据结构 | B+Tree

    数据库索引原理 | 索引数据结构 | B+Tree 文章目录 数据库索引原理 | 索引数据结构 | B+Tree 一. 数据库索引简介 二. 红黑树 与 B-Tree 1. 红黑树 2. B-Tree ...

最新文章

  1. 【Kotlin】接口 ( 声明 | 实现 | 接口方法 | 接口属性 | 接口覆盖冲突 | 接口继承 )
  2. 《推荐系统实践》要点思维导图
  3. 爬虫笔记8实例淘宝商品比价爬虫
  4. TIME_WAIT简介
  5. linux配置ip地址 suse_suse linux中为单网卡配置多IP的方法
  6. ASP.NET CORE 项目实战 ---图形验证码的实现
  7. Tomcat服务器的安装及配置
  8. 带鉴权信息的SIP呼叫
  9. 迅雷软件测试报告总结范文,软件测试-实验三
  10. IndentationError: expected an indented block
  11. sdn主要包含哪些接口_SDN概述
  12. 安装Ubuntu后找不到windows启动项的解决办法
  13. 【Tools系列】Windows下一款好用的文件搜索工具:XSearch
  14. 十大IT危机处理高手
  15. BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding
  16. c语言数字字符一起读,如何同时输入字符串和数字
  17. 那些只有程序员才能看懂的冷笑话
  18. PyG MessagePassing机制源码分析
  19. JS字符(字母)与ASCII码转换
  20. 如何在WPF中使用虚拟键盘

热门文章

  1. android gif 卡顿,Android SketchImageView 加载Gif图片,解决界面不流畅卡顿问题
  2. 数字电路基础知识—— IO外设之GPIO介绍
  3. HTML5桌面应用程序开发
  4. mac的obs录制不到全屏
  5. word文档创建及在线预览方法
  6. arm-linux-g++ crypto,在Ubuntu中找不到libcrypto
  7. linux服务网卡速率查看,linux下查看网卡速率
  8. Excel函数大全-12统计函数
  9. __init__在python中的用法_如何打“我爱你”的摩斯密码
  10. rollup函数(分组后对每组数据分别合计)