Explain工具介绍
使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析查询语句或是结构的性能瓶颈。在select语句之前增加explaion关键字,MySQL会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行SQL。
Explaion分析示例
-- actor建表语句:CREATE TABLE `actor` ( `id` int(11) NOT NULL, `name` varchar(45) DEFAULT NULL, `update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8
-- film建表语句:CREATE TABLE `film` ( `id` int(11) NOT NULL, `name` varchar(10) NOT NULL, PRIMARY KEY (`id`), KEY `idx_name` (`name`))ENGINE=InnoDB DEFAULT CHARSET=utf8
-- film_actor建表语句:CREATE TABLE `film_actor` ( `id` int(11) NOT NULL, `film_id` int(11) NOT NULL, `actor_id` int(11) NOT NULL, `remark` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`),KEY `idx_film_actor_id` (`film_id`,`actor_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
数值类型
tinyint:1字节
smallint:2字节
int:4字节
bigint:8字节
时间类型
date:3字节
timestamp:4字节
datetime:8字节
如果字段允许为NULL,需要1字节记录是否为NULL
索引最大长度是768字节,当字符串过长时,MySQL会做一个类似做前缀索引的处理,将前半部分的字符串提取出来做索引。
ref列
这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有: const(常量),字段名等。一般是查询条件或关联条件中等号右边的值,如果是常量那么ref列是const,非常量的话ref列就是字段名。
EXPLAIN SELECT * from film_actor where film_id =1;
row列
这一列是mysql估计要读取并检测的行数, 注意这个不是结果集的行数。
Extra列
这一列是额外信息。
Using index :使用覆盖索引(结果集的字段是索引,即select后的film_id)
explain select film_id from film_actor where film_id=1;
Using index condition :查询的列不完全被索引覆盖,where条件中是一个前导的范围
explain select * from film_actor where film_id > 1;
Using where :使用where语句来处理结果,查询的列未被索引覆盖
explain select * from actor where name ='a'
Using temporary :mysql需要创建一张临时表来处理查询。出现这种情况一般要进行优化,首先要想到是索引优化。
explain select DISTINCT name from actor;
actor.name没有索引,此时创建了临时表来处理distinct。
explain select DISTINCT name from film;
file.name建立了普通索引,此时查询时Extra是Using index,没有用到临时表。
Using filesort :将用外部排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序。这种情况下一般也是要考虑使用索引来优化的。
explain select * from actor order by name;
actor.name未创建索引,会浏览acotr整个表,保存排序关键字name和对应id,然后排序name并检索行记录。
explain select * from film order by name;
film.name建立了idx_name索引,此时查询时extra是Using index。
select tables optimized away :使用某些聚合函数(比如:max、min)来访问存在索引的某个字段
explain select min(id) from film ;
有兴趣的同学可以访问PHP中文网了解更多相关内容:Mysql视频教程
以上就是Mysql数据库性能优化神器——explain关键字的详细内容,更多请关注Gxl网其它相关文章!
查看更多关于Mysql数据库性能优化神器——explain关键字的详细内容...