Oracle索引结构
BTREE索引
索引是建立在是表的具体列上的,其存在的目的是让表的查询变得更快,效率更高。表的记录丢失关乎生死,索引丢失只需要重建即可。
由图可知,索引是由Root(根块)、Branch(茎块)和Leaf(叶子块)三部分组成。
- Leaf存储了key column value (索引具体值),以及能具体定位到数据块所在位置的rowid
举个例子,select * from t where id = 12
大概会经过多少个IO?
首先定位到节点的根部(第1次),接下来根据根块数据的分布,定位到索引的茎部(第2次);然后定位到叶子块,找到id=12的部分(第3次)。从索引块到数据块获取其他各列信息(第4次)。
物理结构还是逻辑结构
- 要建索引先排序
rowid 伪列,这是第一行的唯一标记,第一行的rowid值绝对不重复,它可将行的记录定位到数据库的位置。
如图,建立索引后,先从test表中的id列的值顺序取出数据放在内存中(除了该列值,rowid也会一并被取出)。如下图,
- 列值入块成索引
依次将内存中的顺序存放的列的值和对应的rowid存进Oracle空闲的BLOCK中,形成了索引块,如下图所示,
- 填满一块接一块
随着索引列值不断插入,index block1(L1)很快就被插满了, 比如接下来取出的 id=9 的记录就只有插入到新的Oracle块中,如果图所示 index block2(L2)。与此同时,新的数据写到另一个块index block3(B1)中。index block3(B1)担负起管理的角色,记录了L1和L2的信息,并不记录具体的索引列的键值。
- 同级两块需人管
B1块虽然仅仅存放叶子块的标记,但随着数据的增多,最终也会容纳不下。这些会诞生root根块,管理B1,B2。
索引结构三大特性
- 索引高度较低。一张500G的大表,记录有几百亿条数据,但是该表上某列的索引的高度也才不过6层而已。
- 数据库最小的单位是块,但最小分配单位是区,要存在一个段至少需要一个区。
- 如果查询返回大部分的数据,索引返回要慢得多。全表扫描还有一个优势,就是一次可以读多个块。索引读一次只能读一个快,因为并发不能保证数据有序。
- 索引存储列值。叶子块存储索引的列值和rowid
- 索引本身有序。索引是从表中取出数据,再顺序插入到块里形成索引块的。
Oracle索引结构相关推荐
- oracle索引 oracle索引结构 oracle索引使用 B*Tree索引
在进行数据查询的时候如果碰到大量数据集中的少量数据查询问题,可以通过在查询字段上新增索引提高查询速度 如果查询的结果集是大批量数据,那么就没必要使用索引了. 索引结构 举个例子:表A 列 a, b, ...
- mysql支持非关系_说下oracle、mysql、非关系型数据库中的索引结构?
谢邀~~树懒君悉心整理了一篇索引结构方面的内容,跟各位知友分享分享~ Oracle 索引的数据结构:B-TreeOracle 数据库使用 B-trees 存储索引,来加速数据访问.若没有索引,你必须顺 ...
- Oracle索引树的结构
关于Oracle索引树的结构以及它们对Oracle性能调优是否重要存在大量的.激烈的争论,而且已经有很多文章试图来描述这些重要的Oracle性能工具的内部工作机制.关于这个论题也出现了一些新书,例如由 ...
- SQL Server 索引结构及其使用(二)(转)
SQL Server 索引结构及其使用(二) 作者:freedk 一.深入浅出理解索引结构 改善SQL语句 很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被 ...
- 从千万级数据查询来聊一聊索引结构和数据库原理
在日常工作中我们不可避免地会遇到慢SQL问题,比如笔者在之前的公司时会定期收到DBA彪哥发来的Oracle AWR报告,并特别提示我某条sql近阶段执行明显很慢,可能要优化一下等.对于这样的问题通常大 ...
- 索引名 oracle,ORACLE 索引名称矫情
oracle 索引英文名称很多,翻译过来的话也很多中文名称,不过总得来说词不达意.也就是说讲中文的时候,对方无法理解你说的是啥意思,啥情况,啥原理. 比如前缀,非前缀.本地和全局,普通和分区.B树和位 ...
- SQL Server 索引结构及其使用(二)
作者:freedk 一.深入浅出理解索引结构 改善SQL语句 很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解.比如: select ...
- Oracle数据库基础入门《二》Oracle内存结构
Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...
- 各种oracle索引类型介绍,各种Oracle索引类型介绍
逻辑上: Single column 单行索引 Concatenated 多行索引 Unique 唯一索引 NonUnique 非唯一索引 Function-based函数索引 Domain 域索引 ...
最新文章
- c语言 删除小写字母,c++ - 使用C字符串和指针。 删除除小写字母和空格以外的所有字符 - 堆栈内存溢出...
- div css导航栏设计,CSS+DIV设计实例:超酷的竖排导航栏
- 大神接棒,YOLOv4来了!
- CFile读写文件 实现复制文件功能
- 3Delight NSI: A Streamable Render API
- html5手机常亮,vue开发的webapp中的手机物理返回键,以及屏幕常亮处理
- MathType requires a newer version of MT Extra等MathType问题的不兼容性解决方案
- python如何导入类里_Python导入模块中的所有类(98)
- 通过自动化接口调用InstallShield 报错的解决办法
- easyui datagrid添加合计行
- C# 操作mysql-创建表、插入更新数据
- 微信小程序,标签云效果:自定义颜色,并随机显示不同颜色
- Hypermesh-优化案例学习笔记-cclip
- Sobel边缘检测算子数学原理再学习
- “体验版”PyTorch 2.0备受瞩目,它到底好在哪里?
- python用泰勒级数计算圆周率_Python中利用进度条求圆周率
- ubuntu 关闭系统自动更新
- 系统自带功能之视频压缩
- matlab 已实现极差波动,关于黄金期货论文范文写作 中国黄金期货价格SVR智能预测相关论文写作资料...
- c#中如何将byte数组转换成string从而在textbox中显示出来?