MySQL执行计划explain详解explain命令是查看查询优化器如何决定执行查询的主要方法。这个功能有局限性,并不总会说出真相,但它的输出是可以获取的最好信息,值得花时间去了解,因为可以学习到查询是如何执行的。SQL优化准则禁用select*使用selectcount(*)统计行数尽量少运算尽量避免全表扫描,如果可以,在过滤列建立索引尽量避免在where子句对字段进行null判断尽量避免在where子句使用!=或者<>尽量避免在where子句使用or连接尽量避免对字段进行表达式计算尽量避免对字段进行函数操作尽量避免使用不是复合索引的前缀列进行过滤连接尽量少排序,如果可以,建立索引尽量少join尽量用join代替子查询尽量避免在where子句中使用in,notin或者having,使用exists,notexists代替尽量避免两端模糊匹配like%***%尽量用unionall代替union尽量早过滤避免类型转换尽量批量insert优先优化高并发sql,而不是频率低的大sql尽可能对每一条sql进行explain尽可能从全局出发2、执行计划的生成和查看2.1执行计划的生成方法:explainselect…………….生成的方法很简单在相应的select前面加explain即可2.2执行计划的查看Id:包含一组数字,表示查询中执行select子句或操作表的顺序;执行顺序从大到小执行;当id值一样的时候,执行顺序由上往下;Select_type:表示查询中每个select子句的类型(简单OR复杂),有以下几种?SIMPLE:查询中不包含子查询或者UNION?PRIMARY:查询中若包含任何复杂的子部分,最外层查询则被标记为PRIMARY?SUBQUERY:在SELECT或WHERE列表中包含了子查询,该子查询被标记为SUBQUERY?DERIVED:在FROM列表中包含的子查询被标记为DERIVED(衍生)?若第二个SELECT出现在UNION之后,则被标记为UNION;?若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED?从UNION表获取结果的SELECT被标记为:UNIONRESULTType:表示MySQL在表中找到所需行的方式,又称“访问类型”,常见有以下几种?ALL:FullTableScan,MySQL将进行全表扫描;?index:FullIndexScan,index与ALL区别为index类型只遍历索引树;?range:rangeIndexScan,对索引的扫描开始于某一点,返回匹配值域的行,常见于between、<、>等的查询;?ref:非唯一性索引扫描,返回匹配摸个单独值的所有行。常见于使用非唯一索引或唯一索引的非唯一前缀进行的查找;?eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描?const、system:当MySQL对查...