MySQL索引以及优化总结
MySQL索引以及优化总结 B树和B+树结构 MyISAM与InnoDB 的存储区别 索引的本质 联合索引(最左前缀匹配原则) 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