好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Mysql数据库性能优化神器——explain关键字

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关键字的详细内容...

  阅读:49次