我的编程空间,编程开发者的网络收藏夹
学习永远不晚

sql慢查询解决方案

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

sql慢查询解决方案

一、慢查询产生原因

大体有以下三种可能:

1、索引没有设计好;

2、SQL 语句没写好;

3、MySQL 选错了索引。

二、慢查询解决方案

1、针对索引没有设计好的解决方案:给表重新加索引重新加索引

2、针对SQL 语句没写好的解决方案:重写sql语句

【下一版本修复】:检查业务代码中的sql,是否使用了条件字段函数操作、是否有隐式转化【

①检查是否在搜索条件中使用了条件字段函数操作(例如month活动id+1=1000等),导致优化器放弃走树搜索功能,走全索引扫描

② 比如id值为string,查询语句用了int(对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。)

③ 由于字符集不同(utf8mb4),导致表连接查询的时候用不上关联字段索引,需要把转化放在条件=的后面,就可以使用索引

a、两张表的字符集改成统一

b、sql改写,需要把转化放在条件=的后面来使用索引】

【线上紧急修复】:数据库执行层:使用query_rewrite功能让执行的sql重写成可以使用索引的语句

3、针对MySQL 选错了索引的解决方案:

【线上紧急修复】:就是给这个语句加上 force index,使用查询重写功能,给原来的语句加上 force index,也可以解决这个问题。

【不紧急】:

① 使用force index:分析不同索引的查询条数,比如用索引a需要查询5000条、索引b需要查询1000条,此时明显选索引b查询效率更高,但是mysql优化器选择了索引a(因为优化器还会考虑回表、排序等综合因素导致选错),我们需要 force index与原sql做对比,根据结果考虑是否需要使用force index

② 改写语句:例如“select * from t where (a between 1 and 1000) and (b between 50000 and 100000) order by b limit 1;”语句中将”order by b limit 1” 改成 “order by b,a limit 1” ,要求按照 b,a 排序,就意味着使用这两个索引都需要排序。因此,扫描行数成了影响决策的主要条件

③在有些场景下,我们可以新建一个更合适的索引,来提供给优化器做选择,或删掉误用的索引。

三、预先检查方案:

1、上线前,在测试环境,把慢查询日志(slow log)打开,并且把 long_query_time 设置成 0,确保每个语句都会被记录入慢查询日志;

2、在测试表里插入模拟线上的数据,做一遍回归测试;

3、观察慢查询日志里每类语句的输出,特别留意 Rows_examined 字段是否与预期一致。

4、全量回归测试都是必要的。这时候,你需要工具帮你检查所有的 SQL 语句的返回结果。比如,你可以使用开源工具 pt-query-digest

来源地址:https://blog.csdn.net/weixin_43837268/article/details/129655778

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

sql慢查询解决方案

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL慢查询以及解决方案详解

目录一、前言二、慢查询2.1 什么是慢查询?2.2 慢查询配置1、慢查询日志2、未使用索引是否开启日志3、慢查询时间设置4、慢查询路径三、慢查询日志分析3.1 mysqldumpslow工具四、慢查询解决方案4.1 索引失效4.2 SQL语
2023-05-05

七个常见的SQL慢查询问题,及其解决方法

今天一起来介绍7个常见的SQL慢查询语句及其优化方法。得益于摩尔定律,计算机性能已大幅提升,加上数据库的进步以及微服务所倡导的各种反模式设计。因此,我们现在编写复杂SQL查询的机会越来越少。
SQL数据库2024-11-29

sql in查询元素超过1000条的解决方案

目录一、场景描述二、解决方案1、方案一:核心思路是,将集合拆分,使用or 连接。2、方案二:用子查询(临时表)+关联查询总结一、场景描述查询机构下的人员,要同时查询出该机构及其所有下级机构的人员;比如查询北京市,不仅要查询出归属于北京市的
2023-03-06

sql in查询元素超过1000条的解决方案

在oracle数据库中sql使用in时,如果in的能数超过1000就会出问题,下面这篇文章主要给大家介绍了关于sql in查询元素超过1000条的解决方案,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-03-06

mysql跨库查询解决方案

1.第一种跨库查询,是在同一个mysql服务器下两个不同的数据库之间的联查,关系如下图 在同一个mysql服务器下,不同的两个数据直接加上库名就可以实现跨库查询了 select * from t_test1 t1, test2.t_tes
2023-08-19

MySQL自带慢日志排查慢查询SQL

目录1、查询有关query的相关变量:2、开启慢查询日志3. 设置慢查询阈值4.查看慢查询日志其他方式定位慢SQL sXYCjVGzbH总结根据mysql自带慢日志功能定位慢SQL1、查询有关query的相关变量:show global
2022-12-15

详解mysql跨库查询解决方案

本文主要介绍了mysql跨库查询解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2022-11-13

SQL级别慢查询诊断

慢查询是指执行时间较长的SQL语句。在SQL级别慢查询诊断中,可以通过以下步骤来识别和优化慢查询:使用性能分析工具:可以使用MySQL自带的性能分析工具或者第三方工具来分析SQL查询的性能。这些工具可以帮助找出执行时间较长的SQL语句。使用
SQL级别慢查询诊断
2024-08-11

sql查询慢怎么优化

运行缓慢的 sql 查询优化策略:确定查询瓶颈:使用 explain 或 explain analyze 语句。创建适当的索引:为经常使用的列创建索引。优化表连接:使用 hash 或 merge join,显式指定连接条件。重写子查询:使用
sql查询慢怎么优化
2024-06-03

SQL慢查询优化的方法是什么

本篇内容主要讲解“SQL慢查询优化的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL慢查询优化的方法是什么”吧!1.背景页面无法正确获取数据,经排查原来是接口调用超时,而最后发现是
2023-06-26

编程热搜

目录