目录
索引概述:
官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。
一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)。
我们通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都是使用B+树结构组织(多路搜索树,并不一定是二叉的)的索引。
索引的优缺点
索引的结构
MySQL对经典的B+Tree进行了优化,使得数据都存储在叶子结点上
那么为什么InnoDB存储引擎选择使用B+Tree索引结构?
1.相对也二叉树,层级更少,搜索效率高;
2.对于B-Tree,无论是叶子结点还是非叶子结点,都保存数据,这样导致一页中存储的键值减少,指针跟着减少,要同样保存大量数据,只能增加树的高度,导致性能降低;
3.相对Hash索引,B+Tree支持范围匹配及排序操作;
索引分类
索引在InnoDB存储引擎中的存储形式
简单演示过程
索引的使用
1.最左前缀法则(语句中是否存在,与顺序无关)
2.范围查询(为防止索引失效,尽量使要>=或<=)
3.索引列计算
4.字符串不加引号(隐式的类型转换使索引失效)
5.模糊查询
6.or连接的条件
7.数据分布影响
索引使用的技巧
1.SQL提示
2.覆盖索引(重点)
示例:
总结:
尽量使用 联合索引 来避免 回表查询
3.前缀索引
示例:
4.单列索引与联合索引
SQL性能分析
总结:
关于SQL性能分析,我们主要关注type类型,根据type类型来优化SQL语句