数据库稠密索引与稀疏索引

一、稠密索引

如果记录是排好序的,我们就可以在记录上建立稠密索引,它是这样一系列存储块:块中只存放记录的键以及指向记录本身的指针,指针就是一个指向记录或存储块地址。稠密索引文件中的索引块保持键的顺序与文件中的排序顺序一致。既然我们假定查找键和指针所占存储空间远小于记录本身,我们就可以认为存储索引文件比存储数据文件所需存储块要少得多。当内存容纳不下数据文件,但能容纳下索引文件时,索引的优势尤为明显。这时,通过使用索引文件,我们每次查询只用一次I/O操作就能找到给定键值的记录。
 
www.2cto.com

下图所示为一个建立在顺序文件上的稠密索引。

图1
顺序文件(右)上的稠密索引(左)

第一个索引块存放指向前四个记录的指针,第二个索引块存放指向接下来的四个记录的指针,依此类推。

稠密索引支持按给定键值查找相应记录的查询。给定一个键值K,我们先在索引块中查找K。当找到K后,我们按照K所对应的指针到数据文件中找到相应的记录。似乎在找到K之前我们需要检索索引文件的每个存储块,或平均一半的存储块。然而,由于有下面几个因素,基于索引的查找比它看起来更为有效:

1.索引块数量通常比数据块数量少。

2.由于键被排序,我们可以使用二分查找法来查找K。若有n个索引块,我们只需查找log2n个块。

3.索引文件可能足够小,以至可以永久地存放在主存缓冲区中。要是这样的话,查找键K时就只涉及主存访问而不需执行I/O操作。

二、稀疏索引

稀疏索引只为数据文件的每个存储块设一个键-指针对,它比稠密索引节省了更多的存储空间,但查找给定值的记录需更多的时间。只有当数据文件是按照某个查找键排序时,在该查找键上建立的稀疏索引才能被使用,而稠密索引则可以应用在任何的查找键。如图2所示,稀疏索引只为每个存储块设一个键-指针对。键值是每个数据块中第一个记录的对应值。

图2
顺序文件上的稀疏索引

同图1实例一样,我们假定数据文件已排序,且其键值为连续的10的倍数,直至某个较大的数。我们还继续假定每个存储块可存放四个键-指针对。这样,第一个索引存储块中为前四个数据存储块的第一个键值的索引项,它们分别是10、30、50和70。按照前面假定的键值模式,第二个索引存储块中为第五至第八个数据存储块的第一个键值的索引项,它们分别是90、110、130和150。图中我们还列出第三个索引存储块存放的键值,它们分别是假设的第九至第十二个数据存储块的第一个键值。
 
www.2cto.com

在已有稀疏索引的情况下,要找出查找键值为K的记录,我们得在索引中查找到键值小于或等于K的最大键值。由于索引文件已按键排序,我们可以使用二分查找法来定位这个索引项,然后根据它的指针找到相应的数据块。现在我们必须搜索这个数据块以找到键值为K的记录。当然,数据块中必须有足够的格式化信息来标明其中的记录及记录内容,可以采用2.5节和2.7节中的任何技术。

来源: <http://www.2cto.com/database/201301/184440.html>

来自为知笔记(Wiz)

数据库稠密索引与稀疏索引

时间: 2024-08-29 23:40:41

数据库稠密索引与稀疏索引的相关文章

密集索引和稀疏索引的区别

密集索引和稀疏索引的区别 a)密集索引文件中的每个搜索码值都对应一个索引值,其叶子节点保存不仅仅是键值,还保存了位于同一行记录里的其他列的信息,由于密集索引决定了表的物理排列顺序,一个表只能有一个物理排列顺序,所以一个表只能创建一个密集索引. b)稀疏索引文件只为索引码的某些值建立索引项,其叶子节点仅保存了键位信息以及该行数据的地址或者主键. 咱们来对MySql做具体分析,mysql主流的两种存储引擎,一种是MyISAM,另外一种是Inodb,前者不管是主键索引,唯一键索引或者普通索引,其索引均

数据库管理系统之存储和索引

一.基本概念 8.1 外部存储上的数据 在磁盘上读写存储信息的单位是页,页的大小是DBMS的一个参数,典型的值是4KB或者8KB.页I/O(从磁盘输入输入到主存和从主存输出到磁盘)的代价代表了典型的数据库操作的代价,因此优化数据库系统来减小这个代价十分重要. 谨记要点: 1. 磁盘是最重要的外存设备,它允许以一个(或多或少)固定的代价来检索每一页,但是,如果我们按照页面存储的物理顺序连续读取若干页,所花的代价可能比以任意的顺序读取同样的页面要小得多. 2. 磁带是顺序访问设备,需要我们一页一页的

数据库面试系列之四:索引

前言: 做项目的时候遇到一个问题: 写了个网页用来读取后台的数据在前端展示,每次翻页的时候都要过很久数据才显示,后来对where条件的字段增加了索引,数据显示速度明显加快. 索引:在关系数据库中,索引是一种单独的.物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单.索引的作用相当于图书的目录,可以根据目录中的页面快速找到所需的内容. 优点 1.大大加快数据的检索速度; 2.创建唯一性索引,保证数据库表中每一

数据库中的触发器,索引 ,事务

一.触发器 触发器是一种实施复杂数据完整性的特殊存储过程,在对表或视图执行update.insert或delete语句时自动触发执行,以防止对数据进行不正确.未授权或不一致的参数. /*创建update触发器*/ create trigger [dbo].[TaocanType_update] on [dbo].[Table_TaocanType] for update  as update [dbo].[Table_ChoseTaocanType] set Taocan=inserted.Ta

数据库索引- 多列索引

对复合索引,按照字段在查询条件中出现的频度建立索引.在复合索引中,记录首先按照第一个字段排序.对于在第一个字段上取值相同的记录,系统再按照第二个字段的取值排序,以此类推.因此只有复合索引的第一个字段出现在查询条件中,该索引才可能被使用,因此将应用频度高的字段,放置在复合索引的前面,会使系统最大可能地使用此索引,发挥索引的作用. 二.多列索引适合的场景 1.全字段匹配 2.匹配部分最左前缀 3.匹配第一列 4.匹配第一列范围查询(可用用like a%,但不能使用like %b) 5.精确匹配某一列

Mysql数据库理论基础之四 --- 表和索引的管理

一.简介 由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点: 1.是一种数据库管理系统 2.是一种关联数据库管理系统 3.是一种开放源码软件,且有大量可用的共享MySQL软件 4.MySQL数据库服务器具有快速.可靠和易于使用的特点 5.MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中 二.MySQL 存储引擎,也称表类型 2.1. 单字段:    PRIMARY KEY 主键 UNIQUE KEY 唯一键 2.2 单或者多字段:    PRIMARY KE

MySQL数据库(主键、索引、外键、触发器...)

主键: 能够唯一标识表中某一行的属性或属性组.一个表只能有一个主键,但可以有多个候选索引.主键常常与外键构成参照完整性约束,防止出现数据不一致.主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引. 索引: 是用来快速地寻找那些具有特定值的记录.主要是为了检索的方便,是为了加快访问速度, 按一定的规则创建的,一般起到排序作用. 唯一性索引:这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一. 注:当你的应

记录一次数据库某表未创建索引造成的问题

现象描述: 昨天鹰网监控告知廊坊某台物理机CPU使用率接近100%,查看得知每颗逻辑CPU的使用率都接近了100%,但该数据库机器是测试机器,按理说不会造成此问题.截图如下: 处理步骤: 1. 查看消耗大量CPU资源和I/O等待的PID 通过TOP命令即可查看 2. 通过PID查看正在执行的SQL SELECT sql_text FROM v$sqltext a WHERE (a.hash_value, a.address) IN (SELECT DECODE(sql_hash_value, 0

4.非关系型数据库(Nosql)之mongodb:普通索引,唯一索引

 一:普通索引 1创建一个新的数据库 > use toto; switched to db toto > show dbs; admin (empty) local 0.078GB > use toto; switched to db toto > db toto > 2创建100万条数据 > for(var i=1; i <= 1000000; i++){ ...db.c3.insert({name:"zhangsan",age:i});