MySql教程

MySql-1-索引类型

本文主要是介绍MySql-1-索引类型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

    • 索引类型
      • B-Tree索引
      • 哈希索引
      • 空间数据索引
      • 全文索引
      • 聚簇索引
      • 覆盖索引

索引:是存储引擎用于快速找到记录的一种数据结构。

  • 索引可以包含一列,也可以包含多列。多列索引的顺序尤为重要,MySql中采用最左前缀列。
  • 索引是在存储引擎层而不是在服务器层。因为索引没有统一标准,不同存储引擎的索引的工作方式也不一样。

索引类型

B-Tree索引

  1. 一般如果没有特殊说明,则指的就是B-Tree索引。它采用B_Tree来存储数据。但实际上很多存储引擎使用的B+Tree。即每一个叶子节点都包含指向下一个下一个叶子节点的指针。从而方便叶子节点的范围遍历。
  2. 存储引擎以不同的方式去使用B-Tree索引。
    • MySAM使用前缀压缩技术使得索引更小,通过数据的物理位置引用被索引的行。
    • InnDB按照原数据格式进行存储,根据主键引用被索引的行。
  3. B_Tree通常意味数据是顺序存储,并且每一个叶子页到根的距离相同。
    • 这样能够加快访问数据的速度,因为存储引擎不再需要全表扫描来获取需要的数据,它从索引的根节点开始检索即可。
    • 根节点的槽中存放了指向子节点的指针,存储引擎根据指针向下层查找。通过比较节点页的值和要查找的值可以找到合适的指针进入下层子节点,这些指针实际上定义了子节页中值的上限和下限。
    • 最终要么存储引擎找到对应的值,要么该记录不存在。
    • 叶子节点的指针,指向的是被索引的数据。
    • 树的大小也与表的大小直接相关。
  4. 适合查找范围数据。适用于全键值,键值范围或键前缀查找(最左前缀)。
    • like不能使用索引
  5. 用于Order By操作

优点总结

  1. 减少服务器所需要扫描的数据量
  2. 帮助服务器避免排序和临时表
  3. 将随机I/O变成顺序I/O

哈希索引

  1. 基于哈希表实现,只有精确匹配到索引所有列的查询才有效。
    • 每一行数据都会计算hash值,哈希索引将所有的hash值存储到索引中,同时哈希表中保存指向每个数据行的指针。
    • Memory存储引擎显示的支持哈希索引,支持非唯一哈希索引,即hash重复,使用链表结构。
  2. 查找非常快,依赖于内存和紧凑的数据格式。
  3. 索引只包含hash值和行指针,没有存储字段值。不支持范围查询。
  4. 非顺序存储,无法用于排序。
  5. 不支持部门索引匹配查找。
  6. 如果hash冲突,需要遍历链表。
  7. InnDB中可以存在自适应hash索引,针对热点数据,基于内存创建。可以手动创建,用于维护一些存储长字符串的索引。

空间数据索引

  1. MySAM支持空间索引,用作地理存储。无需前缀查询。
  2. 建议用其他产品。

全文索引

  1. 类似于搜索引擎,查找关键词,而不是比较索引值。

聚簇索引

覆盖索引

这篇关于MySql-1-索引类型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!