使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查
询语句或是结构的性能瓶颈
下面是使用explain的例子:
在select语句之前增加explain关键字,MySQL会在查询上设置一个标记,执行查询时,会返回
执行计划的信息,而不是执行这条SQL(如果from中包含子查询,仍会执行该子查询,将结果放
入临时表中)
使用的表
DROPTABLEIFEXISTS`actor`;
CREATETABLE`actor`(
`id`int(11)NOTNULL,
`name`varchar(45)DEFAULTNULL,
`update_time`datetimeDEFAULTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
INSERTINTO`actor`(`id`,`name`,`update_time`)VALUES(1,'a','20171222
15:27:18'),(2,'b','2017122215:27:18'),(3,'c','2017122215:27:18');
DROPTABLEIFEXISTS`film`;
CREATETABLE`film`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`name`varchar(10)DEFAULTNULL,
PRIMARYKEY(`id`),
KEY`idx_name`(`name`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
INSERTINTO`film`(`id`,`name`)VALUES(3,'film0'),(1,'film1'),(2,'film2');
DROPTABLEIFEXISTS`film_actor`;
CREATETABLE`film_actor`(
`id`int(11)NOTNULL,
`film_id`int(11)NOTNULL,
`actor_id`int(11)NOTNULL,
`remark`varchar(255)DEFAULTNULL,
PRIMARYKEY(`id`),
KEY`idx_film_actor_id`(`film_id`,`actor_id`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
INSERTINTO`film_actor`(`id`,`film_id`,`actor_id`)VALUES(1,1,1),(2,1,2),
(3,2,1);