索引的存储结构

下面是本人画的一张关于数据页和索引存储结构图

此图中,最上部分是数据页的存储结构。

下半部分是表中有索引,这里就出现了B-Tree结构,索引的根级会引用索引的下一级,直到索引的最后一级,这一级引用的对象是RID(当表中不存在聚集索引时,RID会指向每一行数据存储位置,RID的字段长度为16字节)或聚集索引列(当表存在索引时,聚集索引指向每一行数据存储位置)。

如果一个表每行存储200个字符,那么一个8Kb页面最多存储8060/200=40行数据。如果索引的字段是20个字节,表中聚集索引字段为16个字节或者没有聚集索引,那么索引行的长度为20+16=36个字节,每一个8Kb索引页存储索引的行数为8060/20=223行,也就是说:当数据小于223行时,索引只需要1个8Kb页面,而数据则需要223/40=6个8Kb页面。当数据大于223行时,索引页会分页,分成两个索引页,此时,会出现更高一级的索引节点,该节点引用它的下一级节点。此时,索引有2级,根级和子页级。根级保存的是对子页级的引用,此时,保存的数据最多为223*223行,如果数据继续增加,那么根级会再次分页并变成第一子页级,同时生成新的根级,也就是上面图的结果,这个时候索引有3级,存储的最大数据为223*223*223。

当需要查询一行数据所有的列时,查询分析器只需要扫描4次就可以找数据。

注意:

1、  当表存在聚集索引时,并且只需要查询聚集索引键值,而查询条件使用到索引时,那么查询一次只需要扫描3次则可以找到数据,因为不需要扫描数据页级。如果查询的是整行,则需要扫描4次,多出来的一次是扫描数据页。

2、  当表不存在聚集索引时,查询某列(非索引列)或整行数据时,查询一次需要扫描4次才能找到数据,因为需要扫描数据页。

如果没有索引时,查找某一行数据,就需要逐行逐行的扫描,所以就会出现全表扫描或聚集索引扫描的情况。

上面的列子中,一个8kb数据页最多只能存储40行数据,而一个索引页最多可以存储223行数据,这里可以看出来索引的一个作用,缩小扫描的次数,用来提升性能。这就是以空间换取性能的结果。

时间: 2024-08-08 23:04:18

索引的存储结构的相关文章

InnoDB引擎的索引和存储结构

InnoDB引擎的索引和存储结构 在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的.而MySql数据库提供了多种存储引擎.用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎. 1.MySQL主要存储引擎的区别 MySQL默认的存储引擎是MyISAM,其他常用的就是InnoDB,另外还有MERGE.MEMORY(HEAP)等. (1)主要的几个存储引擎 MyISAM管理非事务表,提供高速存储和检索,以及全文搜

SQL SERVER大话存储结构(4)_复合索引与包含索引

索引这块从存储结构来分,有2大类,聚集索引和非聚集索引,而非聚集索引在堆表或者在聚集索引表都会对其 键值有所影响,这块可以详细查看本系列第二篇文章:SQL SERVER大话存储结构_(2)_非聚集索引如何查找到行记录. 非聚集索引内又分为多类:单列索引.复合索引.包含索引.过滤索引等.之前文章有具体分析过非聚集索引的存储情况,但是没有对复合索引及包含索引做过多说明,本文来讲讲这两个索引. 如果转载,请注明博文来源: www.cnblogs.com/xinysu/   ,版权归 博客园 苏家小萝卜

SQL Server 索引(一)数据结构和存储结构

本文关注以下方面(本文所有的讨论基于SQL Server数据库): 索引的分类: 索引的结构: 索引的存储 一.索引定义分类 让我们先来回答几个问题: 什么是索引? 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息. 举个例子,索引就像我们查字典时用的按拼音或笔画或偏旁部首 有哪些索引? 从物理结构上可分为两种:聚集索引和非聚集索引 (此外还有空间索引.筛选索引.XML索引) 索引说明 (http://msdn.microsoft.com/zh-cn/l

联合索引在B+树上的存储结构及数据查找方式

能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! 引言 上一篇文章<MySQL索引那些事>主要讲了MySQL索引的底层原理,且对比了B+Tree作为索引底层数据结构相对于其他数据结构(二叉树.红黑树.B树)的优势,最后还通过图示的方式描述了索引的存储结构.但都是基于单值索引,由于文章篇幅原因也只是在文末略提了一下联合索引,并没有大篇幅的展开讨论,所以这篇文章就单独去讲一下联合索引在B+树上的存储结构.本文主要讲解的内容有: 联合索引在B+树

Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构

1. 索引的分类1 1.1. 按照存储结构划分btree,hash,bitmap,fulltext1 1.2. 索引的类型  按查找方式分,两种,分块索引 vs编号索引1 1.3. 顺序索引  vs 散列索引2 1.4. 按索引与数据的查找顺序可分为 正排与倒排索引2 1.5. 单列索引与多列索引 复合索引2 1.6. 分区索引和全局索引 2 1.7.  Trie树一般指字典树 又称单词查找树,Trie树2 1.8. 稠密索引 vs 稀疏索引3 1.9. 多级索引 vs 单击索引3 1.10.

Atitit.数据索引&#160;的种类以及原理实现机制&#160;索引常用的存储结构

Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构 1. 索引的分类1 1.1. 索引的类型  按查找方式分,两种,分块索引 vs编号索引1 1.2. 按索引与数据的查找顺序可分为 正排与倒排索引1 1.3. 单列索引与多列索引2 1.4. 分区索引和全局索引 2 2. 索引建立,更新的流程使用触发更新索引的事件2 3. 索引常用的存储结构 B树文件 叫做“索引顺序存取方法”(Indexed Sequential Access Method),缩写为ISAM.2 4.  Trie

SQL Server 表和索引存储结构

在上一篇文章中,我们介绍了SQL Server数据文件的页面类型,系统通过96个字节的头部信息和系统表从逻辑层面上将表的存储结构管理起来,具体到表的存储结构上,SQL Server引入对象.分区.堆或B树.分配单元等概念. 下图显示了表的存储组织,每张表有一个对应的对象ID,并且包含一个或多个分区,每个分区会有一个堆或者多个B树,堆或者B树的结构是预留的.每个堆或者是B树都有三个分配单元用来存放数据,分别是数据.LOB.行溢出,使用最多的分配单元是数据.如果有LOB数据或者是长度超过8000字节

数据库索引 index介绍 sql索引存储结构

定义: 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息. 例如这样一个查询:select * from table1 where id=10000.如果没有索引, 必须遍历整个表,直到ID等于10000的这一行被找到为止:有了索引之后(必须是在ID这一列上建立的索引),在索引中查找,(例如二分法查找,很快就 能定位10000在索引表中的位置,如果索引存储的是id和该id对应的地址,那就直接指向该地址获取相应的数据)但索引是经过某种算法优化过的,查找次

SQL SERVER大话存储结构(5)

阅读目录(Content) 1 基本介绍 2 对数据库启动的影响 3 日志文件添加方式 4 物理结构 5 延迟日志截断原因 6 管理事务日志 本系列上一篇博文链接:SQL SERVER大话存储结构(4)_复合索引与包含索引 回到顶部(go to top) 1 基本介绍 每个数据库都具有事务日志,用于记录所有事物以及每个事物对数据库所作的操作. 日志的记录形式需要根据数据库的恢复模式来确定,数据库恢复模式有三种: 完整模式,完全记录事物日志,需要定期进行日志备份. 大容量日志模式,适用于批量操作的