目录
1.MYSQL索引概述
MySQL中的索引,就相当于图书馆的检索目录,它是帮助MySQL系统快速检索数据的一种存储结构。我们可以在索引中按照查询条件,检索索引字段的值,然后快速定位数据记录的位置,这样就不需要遍历整个数据表了。而且,数据表中的字段越多,表中数据记录越多,速度提升越是明显。
2.MYSQL常用存储引擎
2.1MyISAM
Mysql5.5 之前默认的版本,最重要的特点那就是不支持事务,但是这也意味着他的存储速度更快,如果你的读写操作允许有错误数据的话,只是追求速度,可以选择这个存储引擎
2.I2nnoDB
默认的存储引擎,最大的特点支持事务。使用的锁粒度为行级锁,可以支持更高的并发;
2.3Memory
将数据存在内存,一旦服务器出现故障,数据都会丢失。默认使用hash索引。
3.索引内存模型
3.1哈希表
- 哈希表就是一种以键值对存储数据的结构。在 MySQL 中 key 用于存储索引列,value 就是某行的数据或者是它的磁盘地址
- 哈希表结构适用于只有等值查询的场景,不适合范围查询。
3.2B+树
B树是一种多路搜索树,查询效率高,特别适合做搜索,是B+树是B树的一种变形树
B+做索引的优势:
- B+树的磁盘读写代价更低:B+树的内部节点并没有指向关键字具体信息的指针,因此其内部节点相对B树更小,如果把所有同一内部节点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多,一次性读入内存的需要查找的关键字也就越多,相对IO读写次数就降低了。
- B+树的查询效率更加稳定:由于所有数据都存于叶子节点。所有关键字查询的路径长度相同,每一个数据的查询效率相当。
- 查询效率更高,B+树只需要去遍历叶子节点就可以实现整棵树的遍历
4.索引类型
4.1主键索引和普通索引
索引类型分为主键索引和二级索引(非主键索引),主键索引树中,叶子结点保存着主键即对应行的全部数据;而二级索引树中,叶子结点保存着索引值和主键值,当使用二级索引进行查询时,需要进行回表操作。
4.2联合索引
- 多个字段组成一个联合索引
- 组合索引的最左前缀匹配原则:联合索引的最左前缀匹配指的是where条件一定要有联合索引的第一个字段
4.3覆盖索引
- 覆盖索引其实是一种特殊的联合索引,即是你查询的字段的所有数据都在索引上,当sql语句的所求查询字段(select列)和查询条件字段(where子句)全都包含在一个索引中(联合索引),可以直接使用索引查询而不需要回表
- 由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。