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最后是怎么执行的。