目录
一、索引概述
优缺点
二、索引结构
1、索引数据结构
2、索引支持结构
3、B树
4、B+树
5、hash索引
6、为啥采用B+树索引
三、索引分类
四、索引语法
五、索引性能分析
5.1查看执行频率
5.2慢查询日志
5.3profiling
5.4explain
六、索引使用规则
6.1验证索引效率
6.2最左前缀法则
6.3范围查询
6.4索引失效的情况
6.4.1索引列运算
6.4.2字符串不加引号
6.4.3模糊查询
6.4.4or连接的条件
6.4.5数据分布情况
6.4.5null情况
6.5索引建议、忽略、强制
6.6覆盖索引
6.7前缀索引
6.8单列索引和联合索引
七、索引设计原则
一、索引概述
优缺点
二、索引结构
1、索引数据结构
2、索引支持结构
3、B树
4、B+树
5、hash索引
6、为啥采用B+树索引
三、索引分类
四、索引语法
五、索引性能分析
5.1查看执行频率
5.2慢查询日志
查看慢查询日志是否开启:
show variables like 'slow_query_log';
5.3profiling
查看profiling开启状态:
select @@profiling;
5.4explain
六、索引使用规则
6.1验证索引效率
用执行的秒数解释即可
6.2最左前缀法则
注意:跟联合索引的顺序没有关系,只要最左前缀存在即可。
如
explain select * from tb_user where profession='软件工程' and age=31 and status='0';
和
explain select * from tb_user where age=31 and status='0' and profession='软件工程';
是一样的效果。
6.3范围查询
注意:尽量使用>= 或<=来用范围查询,这样范围查询右侧的列索引不会失效。
6.4索引失效的情况
6.4.1索引列运算
6.4.2字符串不加引号
6.4.3模糊查询
头部模糊匹配索引会失效
6.4.4or连接的条件
有索引列 or 没索引列 整条语句的索引都失效。
若要解决则需都加上索引。
6.4.5数据分布情况
6.4.5null情况
当条件存在is not null或者is null情况时,不能准确判断是否利用索引了。要具体看数据内容。
6.5索引建议、忽略、强制
注意:
1)use只是建议mysql使用这种索引,并不是强制让mysql必须使用,具体使用哪个索引还要根据mysql哪个索引的执行效率高来进行选择。
2)ignore是忽略掉该索引。
3)force是强制mysql使用该索引。