数据库的散列索引

106 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第25天,点击查看活动详情


索引

索引(index)是帮助数据库高效获得数据的一种数据结构。使用索引可以大大减少检索的数据量,但创建索引和维护索引时需要耗费很多时间,降低 SQL 的执行效率,索引本身是通过物理文件存储的,也会占用一定的空间。

评价标准

访问类型

能有效支持的数据访问类型,包括根据指定的属性值进行查询,或根据给定属性值的范围进行查询。

访问时间

访问一个或多个数据项所需要的时间。

插入时间: 在文件中插入一个新数据项所需要的时间,包括罩盖插入该项的正确位置和修改索引所需要的时间。

删除时间: 在文件中删除一个数据项所需要的时间,包括找到待删除项的正确位置和修改索引所需要的时间。

空间开销

索引结构所需要的额外存储空间。索引使用空间的代价来换取系统性能的提高索引的实现难度决定该索引技术是否使用、能否推广。

散列索引

将索引项中的搜索码及相应的指针按散列文件的形式进行组织。

HASH 方法

  • 简单的 HASH 方法

  • 可扩展的 HASH 方法

    HASH 桶目录是一个包含 2d 个磁盘块地址的一维数组,其中 d 称为 HASH 桶目录的全局深度。 设 H(r)是记录 r 的 HASH 函数值,H(r)的前 d 位确定 r 所在的 HASH 桶编号,每个 HASH 桶对应的磁盘块都有局部深度 d',d’ 是确定 HASH 桶依赖的 HASH 函数值的位数。

散列碰撞解决

  • 溢出链法(封闭哈希法):每个桶都是基本桶,若溢出则由系统提供新的空间链接在基本桶后。
  • 开放式散列法:每个桶都是基本桶,若溢出就插入其他空闲桶,空闲桶的选择:溢出桶下面的一个空闲桶;二次散列。