索引

作者: Kevifunau | 来源:发表于2018-10-29 12:08 被阅读0次

定义

An index is a table/file of (keyVal 索引字段,tupleID 行指针) pairs
索引是定义在存储表(Table)基础之上,有助于无需检查所有记录而快速定
位所需记录的一种辅助存储结构,由一系列存储在磁盘上的索引项(index entries)组成,每一索引项又由两部分构成:

  • 索引字段:由Table中某些列(通常是一列)中的值串接而成。索引中通 常存储了索引字段的每一个值(也有不是这样的)。索引字段类似于词典中的词条。
  • 行指针:指向Table中包含索引字段值的记录在磁盘上的存储位置。行 指针类似于词条在书籍、词典中出现的页码。

image.png

类别

基于构建索引的属性 (是否为 unique)

  • primary 主索引
    index on unique field, may be sorted on A(主码)
    索引构建在 unique 的 attribute上, 主文件在attribute 上有序存储。
  • clustering 聚簇索引
    index on non-unique field, file sorted on A(排序码)
    索引构建在 non-unique的 attribute上, 主文件在attribute 上有序存储,行指针指向每个value 的第一次出现位置。
  • secondary 多级索引/ 辅助索引
    辅助索引不能组织文件
    file not sorted on A

基于索引的结构 (索引 与 主文件的关系)

  • dense 稠密索引
    every tuple is referenced by an entry in the index file
    索引项 与 主文件 记录一一对应
  • sparse
    only some tuples are referenced by index file entries
    索引项 与 部分主文件 一一对应
  • single-level
    tuples are accessed directly from the index file
  • multi-level
    may need to access several index pages to reach tuple

Primary index 主索引的 selection , insertion ,deletion

主索引 也是一种 dense 索引。
i : index pages

  • 通过index找到 数据地址 + 读 + 或读溢出块
    Cost_{select} = log(i,2) + 1r + Ov

查询速度块,复杂度 O(log n)。

  • 通过index找到 数据地址 + 更新索引 + 读+ 或读溢出块 + 写 + 或写溢出块
    Cost_{insertion} = log(i,2) + ( i / 2 ) * (1r + 1w) + (1 + Ov)r + (1+δ)w

*插入 需要重新组织文件, 复杂度O(n) *

Cost_{deletion}

  • if we delete index entries by marking ...
    找到该数据 + 写disk + 更新索引O(1)
    Cost_{delete} = (log2 i + 1 + Ov)r + 2w

  • If we delete index entry by index file reorganisation
    找到该数据 + 更新索引O(n) + 写disk
    Cost_{delete} = (log2 i + 1 + Ov)r + i/2.(1r+1w) + 1w

删除 可以是O(log n ), 也可以是O(n),取决于是否重新组织文件


Clustering Index 聚簇索引

索引构建在 non-unique 的属性上,索引中临近的记录 在主文件中 也是临近的。
一般是 稀疏索引。

cluster index

适用于:

  1. range queries on A (find lower bound, then scan data)
  2. pmr queries on A (search index for specified value)

插入: expensive ! 需要重新组织 index file and data file
删除: 类似 primary index


Secondary index 辅助索引

辅助索引不能组织主文件数据, 所以主索引下面引入一个指针桶 secondary index file。
sparse index (Ix1) on dense index containing (key,offset) pairs
dense index (Ix2) containing just TupleId's

image.png

Insertion 插入:
每次插入, 索引 和 主文件都要同步更新,只 需要 重新组织索引文件
Deletion 删除:
使用mark-style 的方式删除记录,周期性的 重新组织index 文件。


B-Trees

Multi-level Index 多级索引:当索引项比较多时,可以对索引再建立索引,依此类推,形成 多级索引。
B树索引: 一种以树型数据结构来组织索引项的多级索引.
B 树最底层 (叶子节点)与 data file 是 一一对应的 dense index .

depth=3, n=3

B树 的插入

  1. find leaf node and position in node where entry would be stored
  2. if node is not full, insert entry into appropriate spot
  3. if node is full, split node into two half-full nodes and promote middle element to parent
  4. if parent full, split and promote
image.png image.png

插入的复杂度
Cost_{insertion} = Cost_{treesearch} + Cost_{treeinsert} + Cost_{datainsert}

查找复杂度:
一次找到 data
Cost_{one-selection} = (D + 1)r

search index to find leaf node for Lo
// 读 每一个 index ,在读每个data 
for each leaf node entry until Hi found {
    access tuple t using TupleId from entry
}

Cost_{range-selection} = Dr + b_i + b_q

相关文章

  • MySQL索引

    MySQL索引 索引介绍 索引原理与分析 组合索引 索引失效分析 索引介绍 什么是索引索引:包括聚集索引、覆盖索引...

  • Mysql优化

    一.索引科普 主键索引 唯一索引 普通索引 单列索引 多列索引 聚簇索引 非聚簇索引 前缀索引 全文索引 二.优化...

  • Oracle 索引学习

    创建索引 标准语法 唯一索引 组合索引 反向键索引 示例 删除索引 修改索引 重建索引 联机重建索引 合并索引

  • MySQL索引

    索引的作用 查看索引 创建索引 删除索引 索引类型 强制索引和禁止某个索引

  • Pandas数据操作

    Pandas数据操作 Series索引 行索引 切片索引 不连续索引 布尔索引 DataFrame索引 列索引 不...

  • 深入理解四种数据库索引类型(- 唯一索引/非唯一索引 - 主键索

    唯一索引/非唯一索引 主键索引(主索引) 聚集索引/非聚集索引 组合索引 唯一索引/非唯一索引 唯一索引 1.唯一...

  • MYSQL索引

    mysql的4种常用索引类型:唯一索引,主键索引,全文索引,以及普通索引。 普通索引(INDEX):普通索引为索引...

  • 索引类型

    索引类型有: 主键索引; 唯一索引; 普通索引; 全文索引; 多列索引;

  • mysql 查询效率优化之 常用索引的几种类型 新手使用教程,少

    Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引(联合索引,多列索引) 一、建立的方法介绍 ...

  • MySql 数据查询优化

    1. MySQL索引类型: mysql的索引有5种:主键索引、普通索引、唯一索引、全文索引、聚合索引(多列索引)。...

网友评论

      本文标题:索引

      本文链接:https://www.haomeiwen.com/subject/rfdmtqtx.html