explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。
使用方法,在select语句前加上explain就可以了:
explain select surname,first_name form a,b where a.id=b.id
参数
-
table。 表示这行数据是哪张表。
-
type。显示连接使用了哪种类型。 null、 const/system、eq_ref、ref、range、index和ALL,从前到后,性能从最好变最差。
-
null。 表示不用访问表或者索引就能得到结果
-
const/system。 单表中最多只有一条匹配行。
-
eq_reg。 相对于ref来说就是使用的是唯一索引,对于每个索引键值,只有唯一的一条匹配记录(在联表查询中使用primary key或者unique key作为关联条件)
-
ref。 使用非唯一性索引或者唯一索引的前缀扫描,返回匹配某个单独值的记录行
-
range。 索引范围扫描,常见于<、<=、>、>=、between等操作符
-
index。 索引全扫描,MYSQL遍历整个索引来查找匹配的行
-
ALL。全表扫描,MYSQL扫描全表来找到匹配的行
-
possible_keys。显示可能应用在这张表中的索引。如果为空,没有可能的索引
-
key。 实际使用的索引
-
key_len。 使用的索引的长度。
-
ref。 显示索引的那一列被使用。
-
rows。 MYSQL认为必须检查的用来返回请求数据的行数
-
extra。 关于MYSQL如何解析查询的额外信息。性能从好到坏:useing index>usinh where > using temporary | using filesort