前言
索引对有一定开发经验的同学来说并不陌生,合理使用索引,能大大提升sql查询的性能,可以这么讲,随着业务数据量的不断增长,优化系统的响应速度,很大程度上可以说就是集中在索引的优化上;
mysql索引原理
在正式了解与学习mysql索引之前,先对mysql的索引原理再次回顾下;
我们知道,目前大多数使用的mysql引擎为 innodb,而innodb引擎使用的是 B+ Tree,下面通过几张图快速了解下 B+ Tree的结构,
假如存在下面这张表:
那么通过 B+ Tree构建出来的 “ 以ID为主键索引 ” 的树形结构如下:
说明:
- 叶子节点存放的是ID对应的一条完整的记录;
- 查找一条记录时,如果是按照ID搜索,则会采用类似二叉树的方式,最终定位到叶子节点的ID对应的那条记录;
也就是说,如果查询的时候,以ID为参数,则效率是最高的,反之,如果以非主键字段,建立索引,则B+Tree的索引结构将会如下,