目录
一、索引概述
优缺点
二、索引结构
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使用该索引。