mysql explain和DESC
根据执行时间去只可以粗略的判断sql的性能,我们如果想去查看一条sql语句的性能还需要explain去查看sql的执行计划。
EXPLAIN 或者 DESC 命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序。
语法使用
# 直接在select语句之前加上关键字 explain / desc
EXPLAIN SELECT 字段列表 FROM 表名 WHERE 条件;
# 例子
EXPLAIN SELECT a.*,b.* FROM `aoa_attachment_list` AS a
LEFT JOIN `aoa_user` AS b ON a.`user_id`=b.`user_id` AND b.`role_id`=(SELECT role_id FROM `aoa_role_` WHERE `role_name`='CEO')
type说明
表示连接类型,性能由好到差的连接类型为
1.NULL(对正常的业务系统来说,不可能优化为NULL),一般情况下不会为NULL,只有在没有查询任何表的时间才会返回NULL;
2.system(访问系统表)
3.const(根据主键或者唯一索引访问)
4.eq_ref(用于联表查询的状况,按联表的主键或惟一键联合查询。)
5.ref(使用非唯一性的索引进行查询)
6.range(使用单个索引来检索包含在一个或多个索引值间隔内的表行的子集)
7.index(用了索引,但是扫描了全部的索引)
8.all(查询全部数据,扫描全表)
Extra说明