MySQL 索引

霸气de小男生 提交于 2020-03-07 04:09:08

用来记笔记的软件电脑端登不进去了,本来打算过了这段时期,专门总结下知识点,那就直接写在这里吧,有什么问题欢迎指出。

按功能分类

  • 普通索引
  • 唯一索引
  • 主键索引
  • 组合索引
  • 外键索引
  • 全文索引

按结构分类

  • B+ Tree索引:InnoDB和MyISAM
  • Hash索引:Memory

B+ Tree
B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现的,一个节点中的key从左到右非递减排列。

Hash
哈希索引能以 O(1) 时间进行查找,但是失去了有序性:

  • 无法用于排序与分组;
  • 只支持精确查找,无法用于部分查找和范围查找。

InnoDB 存储引擎有一个特殊的功能叫“自适应哈希索引”,当某个索引值被使用的非常频繁时,会在 B+Tree 索引之上再创建一个哈希索引,这样就可以实现快速的哈希查找。

InnoDB存储引擎

  1. InnoDB的数据文件本身就是索引文件。

  2. 叶子节点data域保存了完整的数据记录,这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引(这样的索引成为聚集索引)。

  3. InnoDB的辅助索引data域存储相应记录主键的值。这使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引。

MyISAM存储引擎
MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址,索引文件和数据文件是分离的。

比较
MyISAM存储引擎

  1. 访问快,不支持事务和外键。
  2. 如果应用是以查询操作和插入操作为主,只有很少的更新和删除操作(读密集);不要求事务。

InnoDB存储引擎(5.5之后的默认引擎)

  1. 支持事务,占用磁盘空间大,支持多版本并发控制(MVVC)。锁机制有表锁/行锁。
  2. 要求事务,写频繁的操作。
  3. 崩溃修复能力。

MySQL 索引背后的数据结构及算法原理
MySQL索引
https://github.com/Snailclimb/JavaGuide#mysql
https://juejin.im/post/5b55b842f265da0f9e589e79
https://github.com/CyC2018/CS-Notes/blob/master/notes/MySQL.md

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!