一、稠密索引

如果记录是排好序的,我们就可以在记录上建立稠密索引,它是这样一系列存储块:块中只存放记录的键以及指向记录本身的指针,指针就是一个指向记录或存储块地址。稠密索引文件中的索引块保持键的顺序与文件中的排序顺序一致。既然我们假定查找键和指针所占存储空间远小于记录本身,我们就可以认为存储索引文件比存储数据文件所需存储块要少得多。当内存容纳不下数据文件,但能容纳下索引文件时,索引的优势尤为明显。这时,通过使用索引文件,我们每次查询只用一次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节中的任何技术。

mysql索引和稠密索引_数据库稠密索引与稀疏索引相关推荐

  1. 主键和索引哪个快_数据库两大神器【索引和锁】

    前言 只有光头才能变强 索引和锁在数据库中可以说是非常重要的知识点了,在面试中也会经常会被问到的. 本文力求简单讲清每个知识点,希望大家看完能有所收获 声明:如果没有说明具体的数据库和存储引擎,默认指 ...

  2. 聚集索引和非聚集索引的区别底层_数据库-索引相关

    一.什么是索引 在数据库中,索引的含义与日常意义上的"索引"一词并无多大区别(想想小时候查字典),它是用于提高数据库表数据访问速度的数据库对象. 总而言之,索引是一个排序的列表,在 ...

  3. mysql看表关联视图_MySQL数据库 : 自关联,视图,事物,索引

    自关联查询(自身id关联自身id(主键),查询的时候可以逻辑分为两个表,然后分别起一个别名来区分) select * from areas as city inner join areas as pr ...

  4. mysql基础小测试三_数据库---MySQL(三)

    一.视图 视图是一个虚拟表,是sql的查询结果,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成.视图的数据变化会影响到基表,基表的数据变化也会影响到视图[i ...

  5. 简述一下索引的匹配原则_【进阶之路】索引中一些易忽视的点

    导言 大家好,我是练习java两年半时间的南橘,下面是我的微信,需要之前的导图或者想互相交流经验的小伙伴可以一起互相交流哦. 这是这篇文章的思维导图,因为用的是免费版的软件,所以有不少水印,需要的可以 ...

  6. MySQL按名字查询所有信息_数据库小记:根据指定名称查询数据库表名及根据指定名称查询数据库所有表中的字段名称(支持mysql/postgre)...

    注意:本篇文章仅适用于mysql和postgre这两种数据库 1.查询数据库中所有表名及对应表的详细信息 select * from INFORMATION_SCHEMA.tables 2.根据指定名 ...

  7. mysql临时表索引_数据库查询优化——给临时表建索引

    平时查询数据库时为了查询更加快速,一般都会用到临时表,如select * into #t from tableA ,但是如果数据过大,但但用临时可能也很慢,这时候可以给临时表建个索引,如CREATE  ...

  8. mysql为什么采用b树_为什么MongoDB采用B树索引,而Mysql用B+树做索引

    展开全部 事实上,在MySQL数据库中,诸多存储引擎使用的是B+树,即便其名字看上去是BTREE. 4.1 innodb的索引机制 先以innodb存储引擎为例,说明62616964757a68696 ...

  9. mysql sql 限制条数据类型_数据库的数据类型和约束条件

    存储引擎: 不同的数据应该有不同的处理机制 mysql存储引擎: Innodb:现在版本默认的存储引擎 myisam:mysql老版本的存储引擎 memory:内存引擎(数据全部存在内存中)也叫临时的 ...

最新文章

  1. 简单理解浏览器的event loop 和 JavaScript的同步异步
  2. vagrant 安装使用 win7
  3. 《F4+2团队项目系统设计改进》
  4. 排序算法以及其java实现
  5. 线上问题随笔记录数据库连接池问题
  6. ping命令整个过程详解
  7. C 运算符和语句总结
  8. Python_内置模块2
  9. XSS-Game Level 4
  10. 服务器云端设置怎么退出_换新手机时,3个地方要及时清除退出,别让旧手机成隐私“内鬼”...
  11. Oracle掌管权限和角色
  12. Hadoop的安装教程,很详细
  13. Idea 离线安装插件 Idea 安装离线插件
  14. silklabo哪个公众号有资源_公众号和头条号,做哪个赚钱?
  15. 多媒体视频会议系统的测试方法
  16. HDOJ1430魔板
  17. 计算机无法显示移动硬盘,谁知道移动硬盘在电脑显示不出来是怎么回事?
  18. 数字信号处理综合MATLAB设计 双音多频拨号系统
  19. 手机问题点整理和总结
  20. 笔记|统计学习方法:感知机模型

热门文章

  1. ifconfig、ifup和ifdown命令详解
  2. 新型冠状病毒感染性肺炎来势汹汹,我们该如何应对?
  3. 单例模式实例——神码设计模式
  4. Android仿饿了么加减控件,Flutter + Native混合栈仿饿了么APP
  5. Ae 表达式语言引用​:Global
  6. win11硬盘被bitlocker加密了怎么破解?
  7. python知网查重多少钱_他文献查到凌晨两点,我用Python十分钟搞定!
  8. linux下VsFTP配置全方案
  9. 清新文具科学通用教学课件PPT模板
  10. 从零搭建Robot Framework+Jenkins持续集成环境