优化查询使用 explain
关键字,句尾跟 \G;
格式化结果
type 指标常见类型:
- all:全文检索
- index:基于索引的全文检索。此时若 Extra为
Using index
则发生了索引覆盖,即使用的索引刚好为查询结果列且无需回表(索引检索完毕再根据行号查表) - range:范围检索,如 between、<、>、in
- ref:等值检索 / 非主键或唯一索引的检索
- ref_eq:等值检索且结果只有一条?
- const:主键检索
索引失效:
- 字段与指定查询值类型不匹配,如
select * from user where age='20'
- 头部使用通配符 ‘%’,如
select * from user where name like '%san'
- where子句进行计算或使用聚合函数,如
select * from user where age%2=0
优化建议:
- 尽量使用组合索引代替单一索引,或窄索引(组合索引中1~2个字段,2个以上即为宽索引)
- 遵循最左原则,即使用组合索引时只有当使用第一个字段才算使用了索引。看图理解
- 索引字段多选取where子句常用的
【 参考 】