第四节 mysql 执行计划

SQL 是第四代编程语言。特点是并不关心实现细节,只关心想做些什么,需要什么东西。由于这个原因,并不清楚数据库是如何查询,有时写出的SQL往往执行效率低下。比如在一个表中建了索引,由于不注意细节,写出的SQL并不走索引。
通过执行计划可来检查SQL的执行。

这里对执行计划做了总结

首先建个user表,
CREATE TABLE `user` (
`user_id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`age` int(11) default NULL,
`depart_id` int(11) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk |

做一个简单的执行计划:
mysql> explain select * from user where name ='a';
+----+-------------+-------+------+---------------+------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------------+---------+-------+------+-------------+
| 1 | SIMPLE | user | ref | index_name | index_name | 512 | const | 1 | Using where |
+----+-------------+-------+------+---------------+------------+---------+-------+------+-------------+
1 row in set

对上面的结果进行说明:

(1)id :包含一组数字,表示查询中执行select子句或操作表的顺序
id相同,执行顺序由上至下
如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行

(2)select_type:
SIMPLE :简单表,没有表关联和子查询
PRIMARY:主查询
UNION :UNION中第二个或者后面的查询语句
SUBQUERY:子查询第一个select
(3)table:查询语句中涉及的表名
(4)type:表的连接类型,按照执行效率由高到低,表示如下:
system:
const:
eq_ref:
ref:
ref_or_null:
inde_merge:
unique_subquery:
index_subquery:
range:
index:
all:
具体含义可去MYSQL的官方网站查询
(5)possible_keys:指出MySQL能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用
(6)key:执行SQL真正用到的索引,如果没有使用索引,即为null
(7)key_len:索引字段长度
(8)rows:扫描行数
(9)Extra:执行情况描述说明

个人觉得执行计划最大一点好处就是用来评测SQL是否走索引。如果没有走,可以分析原因。索引是用空间换时间,如果没有走索引,就白白浪费数据库宝贵的空间,更重要的是使SQL执行低下

关于type 描述,可参看附件,附件是在学习sql 执行计划时,搜到的一个很不错的PPT。在此感谢作者的分享。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值