教你如何定位及优化SQL语句的性能问题
机能从好到差依次为:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL,除了ALL之外,其他的type都可以行使到索引,除了index_merge之外,其他的type只可以用到一个索引。 以是,假如通过执行打算发明某张表的查询语句的type表现为ALL,那就要思量添加索引,可能改换查询方法,行使索引举办查询。 possible_keys 也许行使的索引,留意不必然会行使。查询涉及到的字段上若存在索引,则该索引将被列出来。当该列为 NULL时就要思量当前的SQL是否必要优化了。 key 表现MySQL在查询中现实行使的索引,若没有行使索引,表现为NULL。 TIPS:查询中若行使了包围索引(包围索引:索引的数据包围了必要查询的全部数据),则该索引仅呈此刻key列表中。 select_type为index_merge时,这里也许呈现两个以上的索引,其他的select_type这里只会呈现一个。 key_length 索引长度char()、varchar()索引长度的计较公式:
其他范例索引长度的计较公式:ex:
name 索引长度为: 编码为utf8mb4,列长为128,不应承为NULL,字段范例为varchar(128)。key_length = 128 * 4 + 0 + 2 = 514; (https://juejin.im/post/5a52386d51882573443c852a) age 索引长度:int范例占4位,应承null,索引长度为5。 (https://juejin.im/post/5a52386d51882573443c852a) ref 暗示上述表的毗连匹配前提,即哪些列或常量被用于查找索引列上的值 假如是行使的常数等值查询,这里会表现const,假如是毗连查询,被驱动表的执行打算这里会表现驱动表的关联字段,假如是前提行使了表达式可能函数,可能前提列产生了内部隐式转换,这里也许表现为func rows 返回估算的功效集数量,留意这并不是一个精确值。 extra extra的信息很是富厚,常见的有:
一些SQL优化提议1、SQL语句不要写的太伟大。 一个SQL语句要只管简朴,不要嵌套太多层。 2、行使『姑且表』缓存中间功效。 简化SQL语句的重要要领就是回收姑且表暂存中间功效,这样可以停止措施中多次扫描主表,也大大镌汰了阻塞,进步了并发机能。 3、行使like的时辰要留意是否会导致全表扫 有的时辰会必要举办一些恍惚查询好比
要害词%hollis%,因为hollis前面用到了“%”,因此该查询会行使全表扫描,除非须要,不然不要在要害词前加%, 4、只管停止行使!=或<>操纵符 在where语句中行使!=或<>,引擎将放弃行使索引而举办全表扫描。 5、只管停止行使 or 来毗连前提 在 where 子句中行使 or 来毗连前提,引擎将放弃行使索引而举办全表扫描。 可以行使
更换
6、只管停止行使in和not in 在 where 子句中行使 in和not in,引擎将放弃行使索引而举办全表扫描。 可以行使
更换
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |