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


浙公网安备 33010602011771号