解释mysql

时间:2015-11-12 03:47:04

标签: mysql sql

我使用解释计划,但我很困惑它的真正含义是什么。

explain extended 
select * 
from (select type_id from con_consult_type cct  
      where cct.consult_id = (select id 
                              from con_consult 
                              where id = 1)) 
      cctt left join con_type ct on cctt.type_id = ct.id;

结果是 enter image description here

我谷歌派生的是临时表,但它的临时表的SQL是什么?是ctt表吗? 而第2步是cctt left join con_type ct on cctt.type_id = ct.id的结果? FK_CONSULT_TO_CONSULT_TYPE是consult_id参考con_consult id列, 如何在sql中使用索引? 得到ctt的所有结果,然后使用索引过滤器?

请帮我解释一下解释的含义。

1 个答案:

答案 0 :(得分:1)

这是一个不好的查询来学习explain输出的基础知识,所有子查询和连接都发生了太多的事情。

我可以减少一些必需品;

  • '行'专栏:越少越好,它显示数据库必须扫描多少行,少于几百的行是好的,通常表示它能够从索引中找到数据的程度;
  • ' possible_keys':和'键':如果'行'很大,您可能需要调整密钥以便为引擎提供一些帮助来查找数据
  • '输入':联接类型

回答你的一些问题;

  • '临时表的sql' - 它是你的SQL中的第一个子查询
  • 使用FK_CONSULT_TO_CONSULT_TYPE你不需要做任何事情,引擎已经把它作为一个索引,这就是解释所说的。
  • 查询分为3个基本步骤;选择数据,过滤和加入。解释中的每一行都是一个或多个这些操作的细节,它可能不一定与SQL的特定部分有关,因为引擎可能将各个部分组合成一个。