本文梳理MySQL索引
性能分析、索引使用规则(使用以及失效的情况)
SQL性能分析
从以下四个方面分析:
查看SQL频次、
记录SQL超时、
显示SQL耗时,
显示SQL执行过程
查看执行频次
com后面七个_
show global status like 'com_______';
慢查询状态
记录超时的SQL
show variables like 'slow_query_log';
默认关闭:slow_query_log OFF
#打开慢查询日志:
vi /etc/my.cnf
#可以去文件打开
slow_query_log=1
long_query_time=0.1
#查看日志
tail -f xxx-slow.log
profiles详情
展示SQL耗时
查看是否支持
select @@have_profiling;
查看开启状态
select @@profiling;
设置开启
set porfiling = 1;
展示查询耗时
show profiles;
展示某条指令
show profile for query id;
explain执行计划
查看SQL的执行计划,SQL执行过程中如何连接和连接的顺序
explain select *from xxx;
possible_keys 可能用到的索引
key 实际用到的索引
key_len 索引长度
使用规则
索引能够提升效率,但有些情况会导致索引查询失效,下面梳理一下几种情况
联合索引
最左前缀法则
如果索引用了联合索引,要遵循最左前缀法则,最左前缀法则指的是从索引的最左列开始,并且不跳过
索引的列,如果跳过某列,索引将部分失效
多个字段组成的联合索引,查询时看最左边,没使用最左侧,就不使用索引
范围查询
联合查询出现范围查询(<,>),范围右则的列索引将失效
索引失效情况
索引列运算
在索引列上进行运算操作,索引将失效
查询时不可计算列上数据,否则将失效
字符串引号
不加单引号,不容易识别类型
模糊查询
like头部模糊,可走索引,尾部索引,索引会失效
or连接的条件
用or连接的条件,如果or前的条件的列有索引,后面的列没有索引,那么涉及的索引不会被用到
两则任意没有索引,都不会用到,可通过执行计划查看
数据分布影响
MySQL会评估是否使用索引,如果全表扫描比索引查询效率高,就不会使用索引。









网友评论