概述:
- 调优的最常用手段
- 搜索语句前加
explain就会打印执行计划。 - 官方文档:
每个列的含义:
id
select的优先级
- 每个查询的优先级
-
select_type
select查询的类型
simple:简单查询
- primary:复杂查询的最外层
- subquery:包含在select中的子查询
- derived:包含在from子句中的子查询。(查询结果会放在临时表)
table
查询的表
- 当前访问的表
- 如果是子查询的表是
,N表示当前查询的id
type
查询的姿势
- 表示关联类型或访问类型,即MySQL如何查找表中的行
效率从最优到最差分别为:
possible_key
可能用到的索引项
key
实际采用的索引
- 如果为null表示没有使用索引
- 如果想强制使用某个索引用 force index
- 如果想强制不适用某个索引用 ignore index
key_len
索引里使用的字节数
- 索引里使用的字节数
- 可以通过这个值算出具体使用了索引中的哪些列
- 索引最大长度为768字节,当字符串过长时,mysql会做一个类似做前缀索引的处理,将前半部分的字符提取出来做索引。
- 计算规则:
- 字符串:
- char(n):字节长度
- varchar(n):如果是utf-8,则长度 3n+2 字节,假的2字节用来存储字节长度
- 数值类型
- tinyint:1字节
- smallint:2字节
- int:4字节
- bigint:8字节
- 时间类型
- date:3字节
- timestamp:4字节
- datetime:8字节
- 如果字节允许为null,需要亿字节记录是否为null
- 字符串:
ref
查询索引时表查找值所用到的列或常量
- 在key列记录的索引中,表查找值所用到的列或常量
- 常见的有:const(常量),字段名
