MySQL索引以及优化总结

帅比萌擦擦* 提交于 2020-03-06 19:14:59

B树和B+树结构

MySQL为什么要用B+树:与二叉树和红黑树不同的是B树的节点上可以存放多个索引,这样降低了树的高度,使得查询效率更高。B+树在B树的基础上加以改进,父节点存放冗余索引,叶子节点存放所有的索引和数据(可能是索引对应行数据的文件地址或,也可能是整行数据),并且节点之间通过指针相互关联,查询效率进一步提升。
在这里插入图片描述
在这里插入图片描述

MyISAM与InnoDB 的存储区别

InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高,但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,否则其他索引也会很大。而 MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针,主键索引和辅助索引是独立的。

在这里插入图片描述

索引的本质

为什么索引一般选用tree而不用hash:因为hash只使用与指定值的查找而范围查找就需要全表扫描。
在这里插入图片描述

联合索引(最左前缀匹配原则)

最左前缀匹配原则,是一个非常重要的原则,可以通过以下这几个特性来理解。
1、对于联合索引,MySQL 会一直向右匹配直到遇到范围查询(> , < ,between,like)就停止匹配。比如 a = 3 and b = 4 and c > 5 and d = 6,如果建立的是(a,b,c,d)这种顺序的索引,那么 d 是用不到索引的,但是如果建立的是 (a,b,d,c)这种顺序的索引的话,那么就没问题,而且 a,b,d 的顺序可以随意调换。
2、= 和 in 可以乱序,比如 a = 3 and b = 4 and c = 5 建立 (a,b,c)索引可以任意顺序。
3、如果建立的索引顺序是 (a,b)那么直接采用 where b = 5 这种查询条件是无法利用到索引的,这一条最能体现最左匹配的特性。
在这里插入图片描述

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