explain + sql
id id值相同,按顺序执行,否则值越大越先执行。
select_type 查询类型 有 simple , primary , subquery , derived , union , union result
type 访问类型 all, index, range , ref , eq_ref, const system , null
从优到劣:system > const > eq_ref > ref > range > index > all
possible_keys 可能用到的索引
key 使用到的索引
key_len 数值越小越好
ref 显示索引被哪里使用
rows 读取的行数
extra 额外的信息:
using filrsort 使用文件内排序,会浪费性能
using index 使用索引
using temporary 使用了中间临时表存放记录
using where
using join buffer
impossible where
distinct
select table optimized away
filtered 存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例
联合索引:
全值或者左前匹配,
不要在索引做操作(计算,转型),
范围查找右边会失效,
不等于(<>,!=)和is null或者is not null 之后会失效
like匹配(%%)失效(xxx%)不失效
or连接的时候会失效
groupby先排序后分组,条件尽量写在where里,不要写having里,where执行先于having
开启慢日志记录 slow_query_log
使用mysqldumpslow进行慢日志分析
show profile等等的使用