MySQL -- explain 的详解

MySQL中可以通过explain 查看sql的执行计划。 里面展示了表之间的和索引之间的应用关系。可以参照explain来进行sql 调节,达到优化sql的目的。

 

查看下面的sql样例

EXPLAIN
SELECT DISTINCT t.id AS id, t.domain AS domain , w.site_name AS siteName ,t.vuln_num AS vulnNum,  w.site_type AS siteType, t.page_num AS pageNum,  DATE_FORMAT(t.scan_time,'%Y-%m-%d %H:%i:%s') AS scanTime
 FROM  website_vuln_info t 
     LEFT JOIN website_site_info w ON t.domain=w.domain 
     LEFT JOIN website_vuln_detail d ON 
       t.id=d.vuln_info_id 
  WHERE T.scan_time >= '2016-05-01' AND t.scan_time <='2016-05-18'

可以看到返回列包括: id, select_type, table, type, possible_keys,key,key_len, ref,row2, extra 等几项

 

 一、id

   表示了sql 的执行顺序呢。 id 号越高,越先执行,如果是id号相同,从上向下执行

   EXPLAIN 
   SELECT domain, scan_time
   FROM website_vuln_info WHERE domain IN (SELECT DISTINCT domain FROM website_site_info)
   

 

二、select_type

   1、SIMPLE  

            最常见的。 直接查询,from后没有子查询或者没有union。在上图中显示的及时SIMPLE。

   2、PRIMARY

              在from后有子查询的,子查询的最外层select

    

   EXPLAIN 
   SELECT * FROM (
   SELECT domain, scan_time
   FROM website_vuln_info WHERE domain IN (SELECT DISTINCT domain FROM website_site_info)
   ) a
   

  

 

posted @ 2016-06-16 21:48  咖啡茶  阅读(122)  评论(0)    收藏  举报