iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SQL慢查询优化的方法是什么
  • 321
分享到

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

2023-06-26 03:06:21 321人浏览 安东尼
摘要

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

本篇内容主要讲解“sql慢查询优化的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL慢查询优化的方法是什么”吧!

1.背景

页面无法正确获取数据,经排查原来是接口调用超时,而最后发现是因为SQL查询长达到20多秒而导致了问题的发生。
这里,没有高深的理论或技术,只是备忘一下经历和解读一些思想误区。

2.复杂SQL语句的构成

这里不过多对业务功能进行描述,但为了突出问题所在,会用类比的语句来描述当时的场景

复杂的SQL语句可以表达如下:

SELECT * FROM a_table AS a LEFT JOIN b_table AS b ON a.id=b.id WHERE a.id IN (SELECT DISTINCT id FROM a_table WHERE user_id IN (100,102,103) GROUP BY user_id HAVING count(id) > 3)

3.关联查询

从上面简化的SQL语句,可以看出,首先进行的是关联查询。

4.子查询

其次,是嵌套的子查询。此子查询是为了找出多个用户共同拥有的组ID。所以语句中的“100,102,103”是根据场景来定的,并且需要和后面“count(id) > 3”的个数对应。简单来说,就是找用户交集的组ID。

5.耗时在哪?

假设现在a_table表的数据量为20W,而b_table的数据量为2000W。大家可以想一下,你觉得主要的耗时是在关联查询部分,还是在子查询部分?
(思考空间。。。。)
(思考空间。。。。。。。)
(思考空间。。。。。。。。。。)

6.问题定位

对于SQL底层的原理和高深的理论,我暂时掌握不够深入。但我知道可以通过类比和简单的测试来验证是哪一块环节出了问题。

7.初步断定

首先,对于只有一个用户ID时,我会把上面的语句简化成:

ELECT * FROM a_table AS a LEFT JOIN b_table AS b ON a.id=b.id WHERE user_id IN (100)

所以,初步断定应该是嵌套的子查询部分占用了大部分的时间。

9.再进一步验证

既然定位到了是嵌套的子查询语句的问题,那又要分为两块待排查的区域:是子查询本身耗时大,还是嵌套而导致慢查询?
结果很容易发现,当我把子查询单独在DB中执行时,是非常快的。所以排除。
剩下的不言而喻,20秒的慢查询是嵌套引起的。

但因为处于上线紧急的过程中,为了确保,我快速地验证了我的结论:

  • 将子查询的ID单独执行,并把得到的结果序列手动拼成一段ID,如:1,2,3,4, … , 999

  • 将上面得到的序列ID,手动替换到原来的SQL语句

  • 执行,发现,很快!只用了约150 ms

Well Done!  准备修复上线!

10.解决方案

线上的问题,很多时间都是在定位问题和分析原因,既然问题找到了,原因也找到了,解决方案不言而喻。代码简单处理即可。

11.另外一个需要注意的点

当前,实际的SQL语句,会比这个更为复杂,但已足以表达问题所在。但在前期,笔者也做了一些SQL的代码。
因为b_tablea_table大,所以一开始b_table 左关联a_table 时,很慢,大概是1秒多,而且数据量是很少的;但若反过来,a_table 左关联b_table 时,则很快,大概是100毫秒。

所以,又发现一个有趣的现象:

大表 左关联 小表,很慢;小表 左关联 大表,很快。
当然,这些我们理论上都知道,但实际开发会忘却。又或者一开始两个表都为空时,而又没考虑到后期这两个表增长的速度时,日后就会埋下坑了。

到此,相信大家对“SQL慢查询优化的方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: SQL慢查询优化的方法是什么

本文链接: https://www.lsjlt.com/news/306489.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • SQL慢查询优化的方法是什么
    本篇内容主要讲解“SQL慢查询优化的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL慢查询优化的方法是什么”吧!1.背景页面无法正确获取数据,经排查原来是接口调用超时,而最后发现是...
    99+
    2023-06-26
  • MySQL定位并优化慢查询sql的方法是什么
    本篇内容介绍了“MySQL定位并优化慢查询sql的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.如何定位并优化慢查询sql  ...
    99+
    2023-06-22
  • mysql慢查询优化的方法是什么
    MySQL慢查询优化的方法有以下几种:1. 使用索引:索引可以大大提高查询的速度。需要根据查询语句的特点选择合适的列进行索引,避免全...
    99+
    2023-08-31
    mysql
  • oracle多表查询sql优化的方法是什么
    在Oracle中进行多表查询SQL优化可以通过以下方法来实现: 使用合适的连接方式:在多表查询时,选择合适的连接方式(如INNE...
    99+
    2024-04-09
    oracle
  • mysql优化查询的方法是什么
    MySQL 优化查询的方法包括但不限于以下几点: 使用合适的索引:在查询中使用适当的索引可以大大提高查询性能。确保表中的字段有适当...
    99+
    2024-04-23
    mysql
  • Mysql慢查询优化方法及优化原则
    1、日期大小的比较,传到xml中的日期格式要符合'yyyy-MM-dd',这样才能走索引,如:'yyyy'改为'yyyy-MM-dd','yyyy-MM'改为'yyyy-MM-dd'【这样MYSQL会转换为...
    99+
    2024-04-02
  • SQL查询慢的原因是什么
    这篇文章主要介绍“SQL查询慢的原因是什么”,在日常操作中,相信很多人在SQL查询慢的原因是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL查询慢的原因是什么”的疑惑...
    99+
    2024-04-02
  • sql语句查询慢如何优化
    优化 SQL 查询性能的方法有很多,以下是一些常见的优化技巧:1. 索引优化:使用适当的索引可以大大提高查询性能。考虑创建索引以支持...
    99+
    2023-09-27
    sql
  • MyBatis分页查询优化的方法是什么
    MyBatis分页查询的优化方法主要包括以下几点: 使用分页插件:MyBatis提供了一些分页插件,如MyBatis-PageH...
    99+
    2024-03-04
    MyBatis
  • MySQL数据查询优化的方法是什么
    MySQL数据查询优化的方法主要包括以下几种: 使用合适的索引:在表的字段上创建索引可以大大提高查询的性能。确保在经常用于查询的字...
    99+
    2024-04-09
    MySQL
  • mysql回表查询优化的方法是什么
    MySQL回表查询是指在使用索引扫描后,仍需要通过主键再次访问表数据的操作。这种情况通常发生在需要查询的列不在索引中,或者是使用覆盖...
    99+
    2024-04-09
    mysql
  • oracle分页查询优化的方法是什么
    Oracle数据库提供了几种方法来优化分页查询:1. 使用ROWNUM:ROWNUM是一个伪列,表示返回结果集中的行数。可以在查询中...
    99+
    2023-09-20
    oracle
  • mysql分页查询优化的方法是什么
    MySQL分页查询的优化方法包括:1. 使用索引:在进行分页查询时,使用合适的索引可以大大提高查询性能。可以创建适当的索引,以确保查...
    99+
    2023-10-08
    mysql
  • mysql查询性能优化的方法是什么
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • 一个20秒SQL慢查询优化处理方案
    目录1.背景2.复杂SQL语句的构成3.关联查询4.子查询5.耗时在哪?6.问题定位7.初步断定9.再进一步验证10.解决方案11.另外一个需要注意的点1.背景 页面无法正确获取数据...
    99+
    2024-04-02
  • mysql慢日志查询的方法是什么
    要查询MySQL慢日志,可以使用以下方法: 登录到MySQL数据库管理系统。 运行以下SQL查询语句来查看慢查询日志的参数设...
    99+
    2024-03-14
    mysql
  • mongodb集群慢查询的方法是什么
    要找出MongoDB集群中的慢查询,可以采取以下方法:1. 使用MongoDB的内建日志记录:MongoDB提供了内建的慢查询日志记...
    99+
    2023-09-01
    mongodb
  • mysql数据库查询优化的方法是什么
    MySQL数据库查询优化的方法包括以下几个方面: 创建索引:通过在查询涉及的列上创建索引,可以大大提高查询的性能。可以使用CREA...
    99+
    2024-04-02
  • Teradata中优化查询性能的方法是什么
    优化Teradata查询性能的方法如下: 选择合适的索引:在查询中使用索引可以加快数据检索速度,因此需要根据查询的字段和条件选择...
    99+
    2024-04-09
    Teradata
  • mysql位运算查询优化的方法是什么
    在MySQL中,位运算查询优化的方法可以通过使用位运算来查询符合特定条件的数据。以下是一些优化位运算查询的方法: 使用位运算符:...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作