`
jiangwenfeng762
  • 浏览: 286224 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

mysql索引结构

 
阅读更多

刚接触db,索引貌似还是一个高级货,那么多新名词,新概念让人很晕,其实索引真的很简单。我们知道IO操作是数据库访问很耗时的操作,应该尽量避免。索引就是在内存中(当然如果索引太大,也可能在硬盘固定的,连续的存储块中)建立一个真实数据的映射,通过索引,我们确定要找的数据范围,然后再通过尽量少的IO到硬盘上把目标数据抓回来。以下是可以作为索引的数据结构,其中mysql采用的是B+树。

顺序文件:几种简单的文件组织,其产生方式是将数据文件按某个查找键排序,并在该文 件上建立索引。 • 稠密索引:这种索引为数据文件的每个记录设一个键-指针对。这些键-指针对按它们的键 值顺序存放。 • 稀疏索引:这些索引为数据文件的每个存储块设一个键-指针对。与指针相对应的键为该 指针所指向的存储块中第一个键值。

• 多级索引:在索引文件上再建索引,在索引的索引上再建索引,等等,这在有时候是很有 用的。高级索引必须是稀疏的。

• 文件的扩展:随着数据文件和它的索引文件的增长,必须采取一些措施来为文件增加附加 的存储块。为文件的基本块增加溢出块是一种可行的办法。在数据文件或索引文件的块序 列表中插入更多的块,除非要求文件本身存放在连续的磁盘块中。

• 辅助索引:即使数据文件没有按查找键K排序,我们也可在键K上建立索引。这样,索引 必须是稠密的。

• 倒排索引:文件与其包含的词之间的关系通常可通过一个词-指针对的索引结构来表示。 指针指向“桶”文件的某个位置,该位置上有一个指向文件中词的出现的指针列表。

• B树:这些结构实质上是有着很好的扩充性能的多级索引。带有n个键和n+ 1个指针的存储 块被组织成一棵树。叶结点指向记录。任何时候所有索引块都在半满与全满之间。

• 范围查询:指查找键值在给定范围内的所有记录,有索引的顺序文件和B树索引可为这类 查询提供便利,但散列表索引不能。

• 散列表:同创建主存散列表一样,我们也可以基于辅存的存储块来建立散列表。散列函数 将键值映射到桶,有效地将数据文件的记录分配到多个小组(桶)。桶用一个存储块和可 能出现的溢出块表示。

• 动态索引:如果一个桶中的记录太多,势必降低散列表的性能,因而随着时间推移,桶的数 量可能需要增加。允许合理增加桶的两种重要方法是可扩展散列和线性散列。它们都首先将 键值散列到一个长位串,然后使用其中若干位来决定记录所属的桶,位的数目是可变的。

• 可扩展散列:这种方法允许在存在记录数太多的桶时将桶的数目加倍。它使用指向块的指 针数组来表示桶。为了避免块过多,几个桶可以用同一个块表示。

• 线性散列:这种方法每当桶中的记录比例超出阈值时增加一个桶。由于单个桶的记录不会 引起表的扩展,所以在某些情形下需要溢出块。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics