面试
1.在sq|语句前面加上explain,然后执行
2.分析输出,关注type,key,rows,extra这几个参数
type常见的值有:ref >range > index>all。
refrange,index都表示用上了索引。
ref表示使用上了非唯一索引,range常见于范围查询,表示扫描索引的一个范围;index表示扫描索引中的所有行;
all表示全表扫描,性能最差。
key表示用到的索引的名称;
rows表示要读取的行数,越小越好
extra会展示一些其它信息,例如using index(表示应用了覆盖索引),using filesort(使用了文件排序)
优化例子:建立联合索引,使索引里面包含要排序的所有字段,从文件排序优化到了索引排序。
| id | select_type | table | type | key | key_len | ref | rows | Extra |
|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | user | ref | idx_age | 5 | const | 1 | Using index |
id=1:单条简单查询,只有一层
select_type=SIMPLE:无关联子查询、无 UNION
table=user:操作表是 user
type=ref:使用普通索引等值匹配,性能良好
key=idx_age:本次查询真正使用了 age 索引
key_len=5:int 类型索引占用 5 字节
ref=const:匹配条件是常量 18
rows=1:预估只扫描 1 行数据
Extra=Using index:覆盖索引,不用回表,性能最优