mysql索引优化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mysql索引优化
Mysql性能优化
⼀、 Mysql的innodb索引的实现原理
innodb⽬前是mysql默认的存储引擎(从5.5.8版本开始),表根据主键组织存放,⼜称主键索引表,B+树数据结构实现,每张表都有⼀个主键,如果在创建时没有显⽰的制定,则innodb会找最近的唯⼀索引作为主键索引,如果也⽆唯⼀索引,则默认⽣成⼀个6字节的int类型⾃增主键。
innodb逻辑存储结构
所有数据存放在表空间,表空间由段、区、页组成,页是InnoDB磁盘管理的最⼩单位,默认⼤⼩为16kb
B+树是B树的升级版,左节点⽐右节点⼩,树的⾼度低,⼀个节点可存储多个数据,叶⼦节点是⼀个有序双向链表。
每个节点是⼀个页,每个页可存放多个数据,每个数据页中以有序数组的⽅式存放数据,遍历时可使⽤⼆分查找法。
B+树索引只是查询找数据⾏所在的页,然后把页读到内存再进⾏查找。
B+树结构图
⼀张图⽚
常见索引介绍
主键索引
树上每个⾮叶⼦节点存放的是索引值和页指针,叶⼦节点存放的是索引值和全量数据。
辅助索引
辅助索引(⾮主键索引),⾮叶⼦节点存放的是索引值和页指针,叶⼦节点存放的是索引值和主键值,找到主键值后,再到主键索引树上进⾏查找-简称回表。
联合索引
联合索引,指由多个字段组成的索引,根据从左到右,按顺序查找数据。
覆盖索引
在⾮主键索引场景中,使⽤了索引的查询并且查询结果中包含索引字段的情况,⽬标值可在辅助索引B+树的叶⼦节点中查询到,不需要回表。
⼆、项⽬中如何合理的使⽤索引
添加索引场景
区别度⼤的字段上加索引
热度⾼的字段上加索引
索引失效场景
索引字段使⽤函数
索引字段参与运算
索引字段使⽤了前模糊查询
联合索引-不符合最左前缀原则
使⽤索引⽐全表扫码更慢的情况
多个单索引,引擎只选⼀个
三、SQL优化案例分析
案例1:⼩结果集驱动⼤结果集
案例2:使⽤联合索引提⾼执⾏效率。