Mysql中怎么优化慢查询

发布时间:2021-06-18 18:03:38 作者:Leah
来源:亿速云 阅读:156

今天就跟大家聊聊有关Mysql中怎么优化慢查询,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

一、打开Mysql的慢查询日志:

方式一:修改my.ini

//定义多少秒的查询算是慢查询,这里定为2秒
long_query_time=2

//5.5及以上版本配置如下
slow-query-log=on
slow_query_log_file="mysql_slow_query.log"

//记录没有使用索引的query
log-query-not-using-indexes

方式二:控制台开启

set global slow_query_lon=ON
set global long_query_time=3600
set global log_querise_not_using_indexes=ON

二、使用EXPLAIN分析sql慢查询语句

Mysql中怎么优化慢查询

Mysql中怎么优化慢查询

上图为使用了索引,下图没有。

type从好到坏依次是:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL

阿里规约要求:至少要达到 range 级别,要求是 ref 级别,如果可以是 consts 最好

三、常用慢查询优化

  1. 索引失效的情况:

  2. 优化数据库结构

    分表分库

  3. 优化LIMIT分页

    当limit m,n的m过大时,导致每次查询都要先从整个表中找到满足条件的前M记录,之后舍弃这M条记录并从第M+1条记录开始再依次找到N条满足条件的记录。如果表非常大,且筛选字段没有合适的索引,且M特别大那么这样的代价是非常高的。


SELECT * FROM pre_forum_post ORDER BY pid ASC LIMIT 7332000,1000

select a.* from pre_forum_post a ,(select tid,position from pre_forum_post ORDER BY pid ASC LIMIT 7332000,1000) b where a.tid=b.tid and a.position=b.position

https://blog.csdn.net/qq_35513598/article/details/79813098

https://blog.csdn.net/qq_35571554/article/details/82800463

  1. 优化in查询

    一条In查询:

    select * from a where id in (select id from b );

    他等同于:

    select * from a where exists(select * from b where b.id=a.id );

    而exists相关子查询的执行原理是: 循环取出a表的每一条记录与b表进行比较,比较的条件是a.id=b.id . 看a表的每条记录的id是否在b表存在,如果存在就行返回a表的这条记录。

    由exists执行原理可知,a表(外表)使用不了索引,必须全表扫描,因为是拿a表的数据到b表查。而且必须得使用a表的数据到b表中查(外表到里表中),顺序是固定死的。

    要想优化,只能在b上建索引,因为a表上的索引mysql利用不上。

    进一步优化,把查询修改成inner join连接查询:

    select * from a inner join b on a.id=b.id;

    为什么不用left join 和 right join?这时候表之间的连接的顺序就被固定住了,比如左连接就是必须先查左表全表扫描,然后一条一条的到另外表去查询,右连接同理。仍然不是最好的选择。而inner join的顺序则是由mysql自己决定,最终选择最优的顺序执行。


看完上述内容,你们对Mysql中怎么优化慢查询有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

推荐阅读:
  1. mysql优化索引、配置,及慢查询讲解
  2. MySQL中应该如何优化SQL语句慢查询

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:SSM框架是什么

下一篇:python清洗文件中数据的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》