Mysql - 查询很慢如何定位排查(接口访问耗时太长)

1)数据库本身

(1)查看数据库状态

(2)查找日志文件中是否有sql相关打印

(3)查看当前连接数

 执行 show processlist 查看mysql正在运行的sql线程

(4)查看mysql慢查询日志(默认情况下,mysql不开启慢查询日志)
   可通过命令:show variables like '%slow_query_log%';

 查看mysql是否开启了慢查询,以及慢查询日志在哪?

   ON表示已开启,时间阈值是10s。
(5) 通过解释函数explain分析sql语句 (可以检查是否匹配到索引)

 explain select id from wow_movie_info

 只需要注意一个最重要的type信息,很明显体现出是否用到索引,type结果值从好到坏依次是:

 system > const > eq_ref > ref > range > index > ALL

   一般来说,得保证查询至少达到range级别,最好能达到ref,否则就可能会出现性能问题。

  (6)  优化 sql 逻辑或者尽量让 sql 走对的索引,例如:

  1)、用in代替 or
  2)、联合所用比单一索引更好,比如:时间一般为第一个参数,vgn_reported_data 联合索引(t,type,ch)
  3)、myism引擎查询更快

(7)子查询过多,一般不建议使用子查询,可以把子查询改成join来优化

(8)深度分页问题

  MySQL会把前120条数据都查出来,抛弃前100条,返回20条

select name,code from student limit 100,20

  随着分页深度的增大,可能会变成 1000000,20。如此大的数据量,速度一定快不起来,最好的方式是增加一个条件:

select name,code from student where id > 1000000 limit 20

  主键索引会直接链接到1000000处,然后查出20条,这个方式需要把上次查询出来的最大id以参数的方式传过来

(9)单纯的数据量过大,分表或分库+分表

2)业务逻辑层面(考虑是否需要开启协程

1)循环调用:这种情况一般都循环调用同一段代码,每次循环的逻辑一致,前后不关联,可以使用多协程的方式

2)顺序调用:一次性的顺序调用,而且调用之间没有结果上的依赖,可以使用多协程的方式

3)网络环境因素

posted @   李若盛开  阅读(2262)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示