BTREE索引

索引是建立在是表的具体列上的,其存在的目的是让表的查询变得更快,效率更高。表的记录丢失关乎生死,索引丢失只需要重建即可。

由图可知,索引是由Root(根块)、Branch(茎块)和Leaf(叶子块)三部分组成。

  • Leaf存储了key column value (索引具体值),以及能具体定位到数据块所在位置的rowid

举个例子,select * from t where id = 12 大概会经过多少个IO?

首先定位到节点的根部(第1次),接下来根据根块数据的分布,定位到索引的茎部(第2次);然后定位到叶子块,找到id=12的部分(第3次)。从索引块到数据块获取其他各列信息(第4次)。

物理结构还是逻辑结构

  1. 要建索引先排序

rowid 伪列,这是第一行的唯一标记,第一行的rowid值绝对不重复,它可将行的记录定位到数据库的位置。

如图,建立索引后,先从test表中的id列的值顺序取出数据放在内存中(除了该列值,rowid也会一并被取出)。如下图,

  1. 列值入块成索引

依次将内存中的顺序存放的列的值和对应的rowid存进Oracle空闲的BLOCK中,形成了索引块,如下图所示,

  1. 填满一块接一块

随着索引列值不断插入,index block1(L1)很快就被插满了, 比如接下来取出的 id=9 的记录就只有插入到新的Oracle块中,如果图所示 index block2(L2)。与此同时,新的数据写到另一个块index block3(B1)中。index block3(B1)担负起管理的角色,记录了L1和L2的信息,并不记录具体的索引列的键值。

  1. 同级两块需人管

B1块虽然仅仅存放叶子块的标记,但随着数据的增多,最终也会容纳不下。这些会诞生root根块,管理B1,B2。

索引结构三大特性

  1. 索引高度较低。一张500G的大表,记录有几百亿条数据,但是该表上某列的索引的高度也才不过6层而已。

    • 数据库最小的单位是块,但最小分配单位是区,要存在一个段至少需要一个区。
    • 如果查询返回大部分的数据,索引返回要慢得多。全表扫描还有一个优势,就是一次可以读多个块。索引读一次只能读一个快,因为并发不能保证数据有序。
  2. 索引存储列值。叶子块存储索引的列值和rowid
  3. 索引本身有序。索引是从表中取出数据,再顺序插入到块里形成索引块的。

Oracle索引结构相关推荐

  1. oracle索引 oracle索引结构 oracle索引使用 B*Tree索引

    在进行数据查询的时候如果碰到大量数据集中的少量数据查询问题,可以通过在查询字段上新增索引提高查询速度 如果查询的结果集是大批量数据,那么就没必要使用索引了. 索引结构 举个例子:表A 列 a, b, ...

  2. mysql支持非关系_说下oracle、mysql、非关系型数据库中的索引结构?

    谢邀~~树懒君悉心整理了一篇索引结构方面的内容,跟各位知友分享分享~ Oracle 索引的数据结构:B-TreeOracle 数据库使用 B-trees 存储索引,来加速数据访问.若没有索引,你必须顺 ...

  3. Oracle索引树的结构

    关于Oracle索引树的结构以及它们对Oracle性能调优是否重要存在大量的.激烈的争论,而且已经有很多文章试图来描述这些重要的Oracle性能工具的内部工作机制.关于这个论题也出现了一些新书,例如由 ...

  4. SQL Server 索引结构及其使用(二)(转)

    SQL Server 索引结构及其使用(二) 作者:freedk 一.深入浅出理解索引结构 改善SQL语句 很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被 ...

  5. 从千万级数据查询来聊一聊索引结构和数据库原理

    在日常工作中我们不可避免地会遇到慢SQL问题,比如笔者在之前的公司时会定期收到DBA彪哥发来的Oracle AWR报告,并特别提示我某条sql近阶段执行明显很慢,可能要优化一下等.对于这样的问题通常大 ...

  6. 索引名 oracle,ORACLE 索引名称矫情

    oracle 索引英文名称很多,翻译过来的话也很多中文名称,不过总得来说词不达意.也就是说讲中文的时候,对方无法理解你说的是啥意思,啥情况,啥原理. 比如前缀,非前缀.本地和全局,普通和分区.B树和位 ...

  7. SQL Server 索引结构及其使用(二)

    作者:freedk 一.深入浅出理解索引结构 改善SQL语句 很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解.比如: select ...

  8. Oracle数据库基础入门《二》Oracle内存结构

    Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...

  9. 各种oracle索引类型介绍,各种Oracle索引类型介绍

    逻辑上: Single column 单行索引 Concatenated 多行索引 Unique 唯一索引 NonUnique 非唯一索引 Function-based函数索引 Domain 域索引 ...

最新文章

  1. c语言 删除小写字母,c++ - 使用C字符串和指针。 删除除小写字母和空格以外的所有字符 - 堆栈内存溢出...
  2. div css导航栏设计,CSS+DIV设计实例:超酷的竖排导航栏
  3. 大神接棒,YOLOv4来了!
  4. CFile读写文件 实现复制文件功能
  5. 3Delight NSI: A Streamable Render API
  6. html5手机常亮,vue开发的webapp中的手机物理返回键,以及屏幕常亮处理
  7. MathType requires a newer version of MT Extra等MathType问题的不兼容性解决方案
  8. python如何导入类里_Python导入模块中的所有类(98)
  9. 通过自动化接口调用InstallShield 报错的解决办法
  10. easyui datagrid添加合计行
  11. C# 操作mysql-创建表、插入更新数据
  12. 微信小程序,标签云效果:自定义颜色,并随机显示不同颜色
  13. Hypermesh-优化案例学习笔记-cclip
  14. Sobel边缘检测算子数学原理再学习
  15. “体验版”PyTorch 2.0备受瞩目,它到底好在哪里?
  16. python用泰勒级数计算圆周率_Python中利用进度条求圆周率
  17. ubuntu 关闭系统自动更新
  18. 系统自带功能之视频压缩
  19. matlab 已实现极差波动,关于黄金期货论文范文写作 中国黄金期货价格SVR智能预测相关论文写作资料...
  20. c#中如何将byte数组转换成string从而在textbox中显示出来?

热门文章

  1. 奔跑结束,徒步开始的PMP备考之旅
  2. 计算机导航种植牙的优势,实时导航精准种植牙
  3. poi导出Excel时设置某个单元格颜色
  4. java 文本词频统计_java实现文本词频统计
  5. 手机微信发送朋友圈的测试用例
  6. 【基础技术】【adb命令】adb原理与常用命令使用示例
  7. 智能机器人以及智能控制算法综述小论文
  8. VTM调用libtorch
  9. ——JavaScript
  10. Windows idea 搜狗输入法输入中文只显示英文