Oracle数据库索引原理分析
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数据库索引原理分析相关推荐
- 资源放送丨《Oracle数据库索引分裂详解》PPT视频
点击上方"蓝字" 关注我们,享更多干货! 前段时间,墨天轮邀请数据库资深专家 孙加鹏 老师分享了<Oracle数据库索引分裂详解>,在这里我们将课件PPT和实况录像分享 ...
- 本周两场直播丨通过源码了解openGauss多线程架构;Oracle数据库索引分裂详解。...
1.管中窥豹之通过源码了解openGauss多线程架构-8月18日20:00 本讲座主要介绍openGauss的多线程架构,通过源码了解线程间通信机制.线程池的原理和优势.如何开启线程池等,力图通过多 ...
- 简述oracle的主要数据库对象,Oracle数据库数据对象分析
Oracle数据库数据对象分析 Oracle数据库数据对象中最基本的是表和视图,其他还有约束.序列.函数.存储过程.包.触发器等.对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数 ...
- 面试题之数据库索引原理
面试题 某年某月某日,在求职面试的过程中被多家公司问及数据库的索引问题,问题如下: 1.你有了解索引吗? 2.你知道索引的具体实现原理吗? 3.你知道索引的数据结构是什么吗? 俗话说,初生牛犊不怕虎, ...
- B-treeB+tree数据库索引原理
B-tree&B+tree:https://www.cnblogs.com/vianzhang/p/7922426.html 数据库索引原理:https://www.cnblogs.com/a ...
- oracle数据库索引介绍,SQL Server和Oracle数据库索引介绍
SQL Server和Oracle数据库索引介绍 SQL Server 和 Oracle 数据库索引介绍1 SQL Server 中的索引 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行 ...
- oracle数据库索引
oracle数据库索引 1.b-tree索引 2.位图索引 3.函数索引 3.哈希索引:不适合模糊查询和范围查询(包括like,>,<,between--and等),由于 Hash 索引比 ...
- 2016年度中国Oracle数据库使用现状分析报告
云和恩墨旗下智能诊断平台Bethune今日发布了[2016年度中国Oracle数据库使用现状分析报告],该报告采样2016年度国内18个大行业.485位用户(个人/企业)的1841套Oracle数据库 ...
- mysql中10049是什么错误_【学习笔记】Oracle数据库10049用于分析SQL解析笔记案例
[学习笔记]Oracle数据库10049用于分析SQL解析笔记案例 时间:2016-11-05 13:54 来源:Oracle研究中心 作者:HTZ 点击: 次 天萃荷净 Oracle研究 ...
- 【MySQL】数据库索引原理 | 索引数据结构 | B+Tree
数据库索引原理 | 索引数据结构 | B+Tree 文章目录 数据库索引原理 | 索引数据结构 | B+Tree 一. 数据库索引简介 二. 红黑树 与 B-Tree 1. 红黑树 2. B-Tree ...
最新文章
- 【Kotlin】接口 ( 声明 | 实现 | 接口方法 | 接口属性 | 接口覆盖冲突 | 接口继承 )
- 《推荐系统实践》要点思维导图
- 爬虫笔记8实例淘宝商品比价爬虫
- TIME_WAIT简介
- linux配置ip地址 suse_suse linux中为单网卡配置多IP的方法
- ASP.NET CORE 项目实战 ---图形验证码的实现
- Tomcat服务器的安装及配置
- 带鉴权信息的SIP呼叫
- 迅雷软件测试报告总结范文,软件测试-实验三
- IndentationError: expected an indented block
- sdn主要包含哪些接口_SDN概述
- 安装Ubuntu后找不到windows启动项的解决办法
- 【Tools系列】Windows下一款好用的文件搜索工具:XSearch
- 十大IT危机处理高手
- BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding
- c语言数字字符一起读,如何同时输入字符串和数字
- 那些只有程序员才能看懂的冷笑话
- PyG MessagePassing机制源码分析
- JS字符(字母)与ASCII码转换
- 如何在WPF中使用虚拟键盘
热门文章
- android gif 卡顿,Android SketchImageView 加载Gif图片,解决界面不流畅卡顿问题
- 数字电路基础知识—— IO外设之GPIO介绍
- HTML5桌面应用程序开发
- mac的obs录制不到全屏
- word文档创建及在线预览方法
- arm-linux-g++ crypto,在Ubuntu中找不到libcrypto
- linux服务网卡速率查看,linux下查看网卡速率
- Excel函数大全-12统计函数
- __init__在python中的用法_如何打“我爱你”的摩斯密码
- rollup函数(分组后对每组数据分别合计)