MySQL慢查询学习笔记

1.什么是慢查询:
mysql的慢查询日志是mysql提供的一种日志记录,它用来记录在mysql中响应时间超过阈值的语句,阈值指的是运行时间超过long_query_time值得SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句。默认情况下,mysql数据库并不启动慢查询日志,需要手动设置这个参数。

2.慢查询注意点:

  • 企业级开发中,慢查询日志是会打开的。但是这同样会带来一定的性能影响。
  • 慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。
  • 默认的阈值(long_query_time)是10s,这个数值一般不用,通常对于用户级应用来说,设置值为0.2s。

3.慢查询相关sql:
查看变量的sql语句
关于变量的说明:

  • 修改变量可以使用命令:set golbal long_query_time = 0.2;(更常见的做法是修改mysql的配置my.cnf)
  • 日志记录到系统的专用日志表中,要比记录到文件耗费更多的资源。所以,不要讲慢查询日志记录到表中。

4.慢查询日志分析工具
mysql内置了工具mysqldumpslow 用于解析mysql慢查询日志,并打印其内容摘要。

  • 使用语法: 略

EXPLAIN关键字
mysql提供了explain命令,可以对慢查询(select)进行分析,并输出select执行的详细信息。我们可以针对输出的信息对慢查询语句进行合理优化。

  • 使用方法:
    -explain select * from user where username like '%名';

explain输出信息及解释:
在这里插入图片描述

  • select_type:最常见的查询类型是simple,这表示查询中没有子查询,也没有UNION查询

  • type:这个字段是判断查询是否高效的重要提示。可以判断查询是全表扫描还是索引扫描。例如:all表示全表扫描,性能最差;range表示使用索引范围扫描,通常是where条件中带有数值比对的;index表示全索引扫描,扫描索引而不扫描数据

  • possibl_keys: 表示查询时可能会使用到的索引,但是并不表示一定会使用。真正的使用了哪些索引,由key决定

  • rows:MySQL优化器会估算此次查询需要扫描的数据记录数(行数),这个值越小,查询效率越高

  • Extra:这是查询语句所对应的"额外信息",常见的有:

    • Using filesort:表示MySQL需要额外的排序操作,不能通过索引顺序达到排序效果。这样的查询应该是要避免的,CPU消耗很高。
    • Using where:在查找使用索引的情况下,需要回表去查询所需的数据
    • Using index:表示查询在索引树中就可以查找所需数据,不用扫描表数据文件
    • Using temporary:查询过程会使用到临时表,常见于order by、group by、join等场景,性能较低

为什么会产生慢查询:

  • 两张比较大的表进行join,但是没有给表的相应字段加上索引
  • 表存在索引,但是查询的条件过多,且字段顺序与索引顺序不一致
  • 对跟单查询结果进行group by

针对慢查询sql的一些改进方法:

  1. 主键本身就是索引,按照主键查询记录效率是最高的。如果有多个字段都需要有索引,且是同时查询(即where条件有多个),一定要使用联合索引
  2. 如果表中包含的列特别多(例如超过20个),或者其中的几列存储的数据过大(例如mediumtext类型)。那么,只查询需要的列,不要使用 select *
  3. exists会比in的查询效率高,数据量大的时候会有明显的速度提升
  4. 使用like时,很多情况下不要使用到索引。所以,效率会降低很多,不要把耗时的操作放在数据库里做,即能不用模糊查询就不用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL慢查询激增时,可能会存在以下几个原因。首先,索引没有设计好可能是一个导致慢查询激增的原因。索引的设计不当可能导致查询的效率低下,从而使得慢查询的数量增加。其次,SQL语句的编写不当也可能是导致慢查询激增的原因。如果SQL语句没有充分利用索引或者存在不必要的关联等操作,都可能导致查询的效率下降。最后,MySQL选择错误的索引也可能导致慢查询激增。MySQL在执行查询时会尝试选择合适的索引,但有时候可能会选择错误的索引,从而导致查询变慢。 为了应对慢查询激增的情况,可以考虑进行以下配置。首先,建议打开MySQL慢查询日志功能,并将日志文件路径设置为指定的目录,如/home/mysql/mysql/log/slow.log。可以通过设置slow_query_log为ON和slow_query_log_file为指定路径来实现。此外,可以通过设置long_query_time的值来定义响应时间超过阀值的语句,如将long_query_time设置为1,表示运行时间超过1秒的语句将被记录到慢查询日志中。这样可以方便地监控慢查询的情况,以便进行进一步的优化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySQL学习笔记5——优化问题(短连接,慢查询,QPS激增)](https://blog.csdn.net/xystrive/article/details/125508577)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MySQL 慢查询的排查方法](https://blog.csdn.net/weixin_39838758/article/details/115886104)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值