B树索引和位图索引的结构介绍

简介: 一  前言:? ROWID:包含键值的行的行ID,(查找块的最快方法,类似于门牌号)? 因为所有行属于同一个段,所以要使用受限的ROWID 指向表行 索引是数据库为了提高查询效率提供的一种冗余结构,保守计算数据库50%以上的调优可以通过调整索引来进行优化...

一  前言:? ROWID:包含键值的行的行ID,(查找块的最快方法,类似于门牌号)? 因为所有行属于同一个段,所以要使用受限的ROWID 指向表行

索引是数据库为了提高查询效率提供的一种冗余结构,保守计算数据库50%以上的调优可以通过调整索引来进行优化;

引用国内一位资深的ORACLE专家的话:"我其实只懂点(挨踢)知识,IT里面其实只懂点甲骨文,甲骨文里面其实只懂点数据库,数据库里面其实只懂点SQL,SQL里面其实只懂点索引"——"你才是真正的专家!"

根据个人的浅薄的经验,作为DBA的日常运维会越来越少,从数据库的每个版本的更新来看,数据库系统已经趋向越来越智能话,DBA能干的活也越来越少了,如果一个DBA只能做做日常的表空间扩容、数据库的备份恢复、启停、系统的更新,那么将是很危险的一件事。而调优自古以来就是一门很高深的学问,如果能把这个做好了,那么DBA能够创造的价值和在公司的作用中,将越来越显著;

说了这么多,应该引入主题了,如果要做好调优,先从索引入手吧。

后续的章节中将陆续更新索引的一些知识,第一章从索引的类别开始吧;

 

二  索引在结构上的类别可划分如下:B树索引、位图索引、散列索引、反转索引等

 

三  索引的介绍:

1、B树索引(BTREE

B数索引是我们日常工作最最常用的索引,大家平时在工作中说的"索引"默认都是B数索引;

索引其实很简单,也很容易理解,用一本书的目录来形容最为贴切了,B树索引的结构跟图书馆的目录也很像

B树索引的结构:

索引的顶层为根,它包括指向索引中下一层次的条目。下一层次为分支块,它又指向位于索引中下一层索引中下一层次的块,最底层的是叶节点,它包含指向表行的索引条目。叶块是双向关联的,这边与按键值升序或降序扫描索引;

 

索引叶条目的格式

一个索引条目包含以下组件:

? 条目头:存储列数和锁定信息

? 键列长度/值对:用于定义键中的列大小,后面跟随列值(此类长度/值对的数目就是索引中的最大列数)。

 

索引叶条目的特性

在非分区表的B 树索引中:

? 当多个行具有相同的键值时,如果不压缩索引,键值会出现重复

? 当某行包含的所有键列为NULL 时,该行没有对应的索引条目。因此,当WHERE 子句指定了NULL 时,将始终执行全表扫描

 

对索引执行DML 操作的效果

对表执行DML 操作时,Oracle 服务器会维护所有索引。下面说明对索引执行DML 命令产生的效果:

? 执行插入操作导致在相应块中插入索引条目。

? 删除一行只导致对索引条目进行逻辑删除。已删除行所占用的空间不可供后面新的叶条目使用。

? 更新键列导致对索引进行逻辑删除和插入。PCTFREE 设置对索引没有影响,但创建时除外。即使索引块的空间少于PCTFREE 指定的空间,也可以向索引块添加新条目。

该图更能体现索引的结构

 

2、位图索引

位图索引(bitmap index)是从Oracle7.3 版本开始引入的。目前Oracle 企业版和个人版都支持位图索引,但标准版不支持。

位图索引在平时的OLTP系统中比较少见,但是在OLAP系统中就会经常见到,号称数据仓库调优的三个利器之一;

 

 

 

位图索引(通过在以下特定情况下,位图索引比B 树索引更有优势:

? 表具有数百万行且键列的基数较低时(也就是列的不同值极少时)。例如,对于护照记录表中的性别和婚姻状况列,位图索引可能比B 树索引更可取。

? 经常使用包含OR 运算符的多个WHERE 条件组合进行查询时

? 键列上的活动为只读活动或少量更新活动时(OLAP系统的特点)

 

位图索引的结构

位图索引也可以按B 树形式进行组织,但是,叶节点会存储每个键值的位图,而不是行ID 列表。位图中每一位与一个可能的行ID 对应,如果设置了该位,则表示具有对应行ID 的行包含键值。

如图所示,位图索引的叶节点包含:

? 条目头,其中包含列数和锁定信息

? 由每个键列的长度/值对组成的键值(在幻灯片的示例中,关键字只由一列组成;第一个条目的键值为Blue)

? 开始ROWID,在本示例中它指定块号10、行号0 和文件号3

? 结束ROWID,在本示例中它指定块号12、行号8 和文件号3

? 由位字符串组成的位图段(如果对应行包含键值,则会设置位;如果对应行不包含键值,则不会设置位。Oracle 服务器使用已获专利的压缩技术存储位图段。)开始ROWID 是位图中的位图段指向的第一行的行ID,也就是说,位图的第一位对应于该行ID,位图的第二位对应于块中的下一行。结束ROWID 是一个指针,它指向由位图段覆盖的表中的最后一行。位图索引使用受限的行ID。

 

使用位图索引

B 树用于定位叶节点,这些节点包含指定键值的位图段。开始ROWID 和位图段用于定位包含键值的行。

对表中的键列进行更改后,也必须修改位图。这会导致相关的位图段被锁定。由于锁是在整个位图段上获得的,因此,在第一个事务处理结束之前,其它事务处理不能更新位图覆盖的行。

 

 

文档的篇幅有限,先介绍最常见的B树索引和位图索引,这只是入门的第一步,后续将会陆续更新,多谢各位的关注。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

本文作者:JOHN

ORACLE技术博客:ORACLE 猎人笔记               数据库技术群:367875324 (请备注ORACLE管理 )  

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

相关文章
|
Oracle 关系型数据库 MySQL
mysql数据库和Oracle的区别
mysql数据库和Oracle的区别
258 1
|
负载均衡 容灾 关系型数据库
mysql主从复制
mysql主从复制
872 1
|
28天前
|
SQL 分布式计算 监控
终于有人把数据倾斜讲清楚了
本文深入剖析大数据处理中的“数据倾斜”问题,从现象到本质,结合真实踩坑经历,讲解数据倾斜的成因、典型场景及四步精准定位方法,帮助开发者从根本上理解和解决这一常见难题。
终于有人把数据倾斜讲清楚了
|
11月前
|
人工智能 Kubernetes 安全
通过阿里云计算巢部署NVIDIA NIM,加速企业大语言模型SaaS化
在人工智能飞速发展的今天,大语言模型(LLM)为各个行业带来了全新的场景和机遇。诸如客户服务数字人,计算机辅助药物研发的生成式虚拟筛选,基于检索增强生成(RAG)的企业多模态PDF数据提取,网络安全流数据过滤、处理和分类优化等工作流,正在无缝集成和运行在定制化的企业AI应用,企业还能够基于专有业务数据和用户反馈数据,不断优化AI应用。
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现深度学习模型:智能电影制作与剪辑
使用Python实现深度学习模型:智能电影制作与剪辑
433 5
|
存储 分布式计算 算法
【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程
【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程
362 0
|
11月前
|
机器学习/深度学习 存储 人工智能
【AI系统】模型演进与经典架构
本文探讨了AI计算模式对AI芯片设计的重要性,通过分析经典模型结构设计与演进、模型量化与压缩等核心内容,揭示了神经网络模型的发展现状及优化方向。文章详细介绍了神经网络的基本组件、主流模型结构、以及模型量化和剪枝技术,强调了这些技术在提高模型效率、降低计算和存储需求方面的关键作用。基于此,提出了AI芯片设计应考虑支持神经网络计算逻辑、高维张量存储与计算、灵活的软件配置接口、不同bit位数的计算单元和存储格式等建议,以适应不断发展的AI技术需求。
266 5
|
存储 消息中间件 NoSQL
聊一聊数据库的行存与列存
好多人最开始学习数据库的时候,是关系数据库,数据以表格形式存储,一行表示一条记录。其实这种就是典型的行存储(Row-based store),将表按行存储到磁盘分区上。 而一些数据库还支持列存储(Column-based store),它将表按列存储到磁盘分区上。
聊一聊数据库的行存与列存
|
12月前
|
人工智能 安全 大数据
CDGA|数据要素与数据安全:携手构建可信数据生态的深远探讨
数据要素与数据安全是数字经济时代不可分割的双生子。只有在保障数据安全的前提下,才能充分发挥数据要素的价值,推动数字经济持续健康发展。构建可信数据生态,需要政府、企业、社会组织及广大公众的共同努力,形成合力,共同应对挑战,共创数字经济的美好未来。
|
存储 运维 监控
阿里云斩获中国电子学会科技进步一等奖
中国电子学会正式公布“2023中国电子学会科学技术奖”名单,清华大学、阿里云、南开大学、北京必示科技完成的“大规模在线服务智能运维核心技术及产业化”获得科技进步一等奖。
769 1