乐趣区

关于mysql:MySQL聚簇索引和非聚簇索引

索引介绍

索引是一种非凡的数据库构造,被设计用来疾速查询数据库表中的特定记录。索引有多种类型,就像字典有拼音查找和偏旁查找一样都是为了进步检索效率。
MySQL 中最常见的索引类型有 B+ 树索引 哈希索引,上面来简略介绍一下这两种索引类型有哪些差异和优劣。

B+ 树索引

B+ 树索引是一种多路径的均衡搜寻树,具备如下特点:

  • 1. 非叶子节点不保留数据,只保留索引值
  • 2. 叶子节点保留所有的索引值和数据
  • 3. 同级节点通过指针自小而大程序链接
  • 4. 节点内的数据也是自小而大程序寄存
  • 5. 叶子节点领有父节点的所有信息

构造如下图:

长处

  • 如图可知,因为数据程序寄存,所以无论是区间还是程序扫描都更快。
  • 非叶子节点不存储数据,因而简直都能放在内存中,搜寻效率更高
  • 单节点中可存储的数据更多,均匀扫描 I / O 申请树更少
  • 均匀查问效率稳固(每次查问都从根结点到叶子结点,查问门路长度雷同)

毛病

  • 新增数据不是按程序递增时,索引树须要重新排列,容易造成碎片和页决裂状况。

哈希索引

哈希索引就是采纳肯定的哈希算法,把键值换算成新的哈希值,检索时不须要相似 B + 树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立即定位到相应的地位,速度十分快,具备如下特点:

  • 1. 哈希索引建设在哈希表的根底上
  • 2. 对于每个值,须要先计算出对应的哈希码(Hash Code),不同值的哈希码惟一
  • 3. 把哈希码保留在哈希表中,同时哈希表也保留指向对应每行记录的指针

构造如下图:

长处

  • 大量惟一等值查问时,哈希索引效率通常更高。

毛病

  • 哈希索引对于范畴查问和含糊匹配查问显得无能为力。
  • 哈希索引不反对排序操作,对于多列联结索引的最左匹配规定也不反对。
  • 哈希索引不反对局部索引列匹配查找,因为哈希索引始终是应用索引列的全部内容来计算哈希值的。
  • 拜访哈希索引的数据十分快,除非有很多哈希抵触(不同的索引列值却有雷同的哈希值)当呈现哈希抵触的时候,存储引擎必须遍历链表中所有的行指针,逐行进行比拟,直到找到所有符合条件的行。

Enjoy GreatSQL :)

本文由博客一文多发平台 OpenWrite 公布!

退出移动版