Heim > Datenbank > MySQL-Tutorial > mysql执行计划_MySQL

mysql执行计划_MySQL

WBOY
Freigeben: 2016-06-01 13:28:16
Original
948 Leute haben es durchsucht

bitsCN.com      烂sql不仅直接影响sql的响应时间,更影响db的性能,导致其它正常的sql响应时间变长。如何写好sql,学会看执行计划至关重要。下面我简单讲讲mysql的执行计划,只列出了一些常见的情况,希望对大家有所帮助。测试表结构:CREATE TABLE `t1` (  `c1` int(11) NOT NULL DEFAULT '0',  `c2` varchar(128) DEFAULT NULL,  `c3` varchar(64) DEFAULT NULL,  `c4` int(11) DEFAULT NULL,  PRIMARY KEY (`c1`),  KEY `ind_c2` (`c2`),  KEY `ind_c4` (`c4`)) ENGINE=InnoDB DEFAULT CHARSET=utf8  CREATE TABLE `t2` (  `c1` int(11) NOT NULL DEFAULT '0',  `c2` varchar(128) DEFAULT NULL,  `c3` varchar(64) DEFAULT NULL,  `c4` int(11) DEFAULT NULL,  PRIMARY KEY (`c1`),  KEY `ind_c2` (`c2`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 CREATE TABLE `t3` (  `c1` int(11) NOT NULL DEFAULT '0',  `c2` varchar(128) DEFAULT NULL,  `c3` varchar(64) DEFAULT NULL,  `c4` int(11) DEFAULT NULL,  PRIMARY KEY (`c1`),  KEY `ind_c2` (`c2`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 1.查看mysql执行计划explain  select ......2.执行计划包含的信息(1).id含义,指示select字句或操作表的顺序。eg1:id相同,执行顺序从上到下,下面的执行计划表示,先操作t1表,然后操作t2表,最后操作t3表。 eg2:若存在子查询,则子查询(内层查询)id大于父查询(外层查询),先执行子查询。id越大,优先级越高。 (2).select_type含义:select语句的类型类型:a.SIMPLE:查询中不包含子查询或者UNIONb.查询中若包含任何复杂的子部分,最外层查询则被标记为:PRIMARYc.在SELECT或WHERE列表中包含了子查询,该子查询被标记为:SUBQUERYd.在FROM列表中包含的子查询被标记为:DERIVED(衍生)e.若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在  FROM子句的子查询中,外层SELECT将被标记为:DERIVEDf.从UNION表获取结果的SELECT被标记为:UNION RESULTeg:id为1的table显示,表示结果来源于衍生表2。id为2表示子查询,读取t3表id为3类型为union,是union的第二个select,最先执行;id为NULL的类型为union result, 表示id为1的操作和id为3的操作进行结果集合并。执行顺序3->2->1->NULL (3).type含义:获取记录行采用的方式,亦即mysql的访问方式。 a.ALL:Full Table Scan, MySQL将遍历全表以找到匹配的行 b.index:Full Index Scan,index与ALL区别为index类型只遍历索引,索引一般比记录要小。因为索引中含有c1,查询c1,c2可以通过索引扫描实现。 c.range:索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行,常见于between、等的查询备注:range类型肯定是使用了索引扫描,否则type为ALL d.ref:非唯一性索引扫描,返回匹配某个单独值的所有行。常见于使用非唯一索引即唯一索引的非唯一前缀进行的查找 t2.c4为非唯一索引 e.eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描t2.c1为主键索引,主键索引也是唯一索引 f.const、system:当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下, 使用system (4).possible_keys含义:指出MySQL能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用(5).key

含义:显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL

(6)key_len

含义:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度

(7)ref

含义:用于连接查询,表示具体某个表的某列被引用

(8)rows

含义:MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数,这个值是不准确的,只有参考意义。

 (9)Extra

含义:显示一些辅助的额外信息

a.Using index,表示使用了索引

b.Using where,表示通过where条件过滤

c.Using temporary,表示使用了临时表,常见于分组和排序

d.Using filesort,表示无法使用索引排序,需要文件排序

eg1:t1.c3列没有索引

eg2:使用索引列t1.c2

 bitsCN.com

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage