mysql查看执行计划重构后的查询

MYSQL优化器会对客服端发送的SQL语句进行优化,优化后的SQL语句再被MYSQL执行。然后我们在优化SQL的时候,怎么获取到MYSQL优化后执行语句呢。

     

EXPLAIN select * 
from sys_system s 
INNER JOIN sys_organ o ON s.system_code=o.system_code;

SHOW WARNINGS;

执行了上述语句后,可以看到结果如下图:

将Message复制下来后查看:

    

select `db_jc`.`s`.`id` AS `id`,
`db_jc`.`s`.`system_code` AS `system_code`,
`db_jc`.`s`.`system_name` AS `system_name`,
`db_jc`.`s`.`state` AS `state`,
`db_jc`.`s`.`description` AS `description`,
`db_jc`.`o`.`id` AS `id`,
`db_jc`.`o`.`system_code` AS `system_code`,
`db_jc`.`o`.`organ_code` AS `organ_code`,
`db_jc`.`o`.`organ_name` AS `organ_name`,
`db_jc`.`o`.`state` AS `state`,
`db_jc`.`o`.`memo` AS `memo`,
`db_jc`.`o`.`creator_name` AS `creator_name`,
`db_jc`.`o`.`creator_id` AS `creator_id`,
`db_jc`.`o`.`create_time` AS `create_time`,
`db_jc`.`o`.`updater_name` AS `updater_name`,
`db_jc`.`o`.`updater_id` AS `updater_id`,
`db_jc`.`o`.`update_time` AS `update_time` 
from `db_jc`.`sys_system` `s` join `db_jc`.`sys_organ` `o` 
where (`db_jc`.`o`.`system_code` = `db_jc`.`s`.`system_code`);

MYSQL重构的查询如上图。

 

在学习《高性能MySql》这本书的时候,书中说到用EXPLAIN EXTENDED后执行SHOW WARNINGS,可以获得重构后的查询。

执行后:

红色圈注里描述 EXTENDED目前已经被MYSQL弃用。再之后的版本中将会被删除。

我这边用的MYSQL是5.7.18-log版本。

 

 总结:在我们对SQL进行优化的时候,了解MYSQL重构后的查询还是很有必要的,可以帮我们了解我们写下的SQL最后是怎么执行的。

posted on 2018-01-31 16:19  阿姆斯特朗回旋炮  阅读(326)  评论(0编辑  收藏  举报

导航