mysql数据库怎么查看优化 mysql数据库查询语句优化( 二 )


6.**key优化器从possible_keys中命中的索引
7.key_len查询用到的索引长度(字节数),key_len只计算where条件用到的索引长度,而排序和分组就算用到了索引,也不会计算到key_len中 。
8.ref如果是使用的常数等值查询,这里会显示const 。
如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段 。
如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func 。
9.**rows这是mysql估算的需要扫描的行数(不是精确值) 。
这个值非常直观显示 SQL 的效率好坏, 原则上 rows 越少越好 。
10.filtered此列表示存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例,注意是百分比,不是具体记录数
11.**extra在大多数情况下会出现以下几种情况 。
Using index:使用了覆盖索引,查询列都为索引字段Using where:使用了where语句Using temporary :查询结果进行排序的时候使用了一张临时表Using filesort :对数据使用一个外部的索引排序Using index condition:使用了索引下推,关于索引下推可以查看之前文章MySQL索引一文12.总结以上就是关于Explain所有列的说明,在平时开发的过程中,一般只会关注type、key、rows、extra这四列 。
type优化目标至少达到range级别,要求是ref级别,如果可以consts最好 。key是查询使用到的索引,如果此列为空,要么未建立索引,要么索引失效 。rows是这条SQL语句扫描的行数,越少越好 。extra:此列为扩展列,如果出现临时表、文件排序则需要优化 。四、SQL优化杀手锏之慢查询
上文说到了可以直接使用explain来分析自己的SQL语句是否合理,接下来再聊一个点那就是慢查询 。
查看慢查询是否打开
查看是否记录没有使用索引的SQL语句
开启慢查询、开启记录没有使用到索引的SQL语句
set global log_queries_not_using_idnexes=‘on’;
set global log_queries_not_using_indexes=‘on’;
查询以上俩个配置是否打开
设置慢查询时间,这个时间由自己把控,一般1s即可set globle long_query_time=1;
如果查看这个时间没有变,则关于客户端再重新连接一次即可 。
查看慢查询存储位置
然后随便执行一条不执行索引的语句即可在这个日志中查看到此语句
上图中一般需要主要观察的是Query_time、SQL语句内容 。
以上就是关于如何使用慢查询来查看项目中出现问题的SQL语句 。
五、优化大法
此处跟大家聊一些常用的SQL语句优化方案,以上的俩个工具要好好地利用,辅助我们进行打怪 。
禁止使用select *,需要什么字段查询什么字段where字段设置索引group by、order by字段设置索引舍弃offset,limit分页,使用延迟关联来实现分页(数据量不大时可不用)写分页时当count为0时,直接返回避免执行分页语句利用覆盖索引进行查询避免回表建立复合索引时区分度最高的放在最左侧统计数据行数只用count(*),别整的花里胡哨的关于in和exist,如果查询的俩个表大小一致则性能差别可忽略,如果子查询表大用exist,否则使用in查询一行数据时加上limit 1选择合理的数据类型,在满足条件下数据类型越小越好联合查询join最多三个表,并且需要join的字段数据类型保持一致in操作能避免尽量避免,无法避免的情况下in元素控制在1000以内数据更新频繁,区分度不高的列不适合建立索引explain中的type至少要达到range,要求为ref联合索引满足最左侧原则


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: