• 数据库慢SQL排查及优化问题


    找到查询会花费很长时间才能返回结果的sql语句

    考虑索引是否合理:确保查询使用了适当的索引。有时候,缺少或错误使用索引会导致查询变慢。

    优化SQL:审查慢查询的SQL语句,看看是否可以通过改写查询或者使用更有效的SQL来提高性能。

    检查数据库服务器:确保数据库服务器有足够的资源来处理查询。不足的CPU、内存或磁盘IO可能会导致性能问题。

    连接池:如果你在应用程序中使用了数据库连接池,确保连接池的配置正确。连接池的设置也可能影响性能。

    数据库统计信息:查看数据库的统计信息,了解表的大小、索引情况和数据分布。这些信息可以指导你哪些地方需要优化。

    查询缓存:考虑使用查询缓存,将经常执行的查询结果缓存起来,以减轻数据库负担。

    分页查询优化:如果涉及到分页查询,确保使用了有效的分页查询方式,避免一次性获取大量数据。

    监控和性能测试:建立监控系统,随时监测数据库性能。进行性能测试,模拟高负载情况,确保数据库在压力下能够正常工作。

    SQL优化规则:
    避免全表扫描:

    select *:会扫描全表,全字段,浪费没必要的CPU资源,同时将查询结果返回时会消耗网络流量

    应尽量避免在 where 子句中使用!=或<>操作符

    where 子句中对字段进行 null 值判断

    用连接查询代替子查询

    因为子查询需要执行两次数据库查询,一次是外部查询,一次是嵌套子查询。因此,使用连接查询可以减少数据库查询的次数,提高查询的效率。

    对于大型数据集,使用连接查询通常比使用子查询更高效。子查询通常需要扫描整个表,而连接查询可以利用索引加速读取操作。

    使用连接查询可以更快地执行查询操作,减少数据库的负载,提高查询的性能和效率。

     提升group by的效率

    创建索引:如果你使用group by的列没有索引,那么查询可能会变得很慢。因此,可以创建一个或多个适当的索引来加速查询。

    调整查询:查询的写法也会影响group by的效率。可以尝试不使用子查询或临时表,或者可以使用JOIN或EXISTS来代替IN子查询。

    限制结果集的数量:如果你只需要查看一小部分结果,可以在查询中添加LIMIT子句,以便只返回一定数量的结果。

    批量操作

    批量插入或批量删除数据,比如说现在需要将1w+数据插入到数据库,大家是一条一条处理还是批量操作呢?建议是批量操作,逐个处理会频繁的与数据库交互,损耗性能。

    使用limit

    提高查询效率:一个查询返回成千上万的数据行,不仅占用了大量的系统资源,也会占用更多的网络带宽,影响查询效率。使用LIMIT可以限制返回的数据行数,减轻了系统负担,提高了查询效率。

    用union all代替union
    • union all:获取所有数据但是数据不去重,包含重复数据;
    • union:获取所有数据且数据去重,不包含重复数据;

    那么union all与union如果当然它业务数据容许出现重复的记录,我们更推荐使用union all,因为union去重数据需要遍历、排序和比较,它更耗时,更消耗cpu资源,但是数据结果最完整。

    减少join表的使用

    多表JOIN操作需要进行大量的计算,因此会导致系统负载增加。

  • 相关阅读:
    排序---冒泡排序及其优化
    Spring常见问题解决 - @RequestParam和@PathVariable的区别以及400报错问题
    tensorflow数据类型转换
    基于ResNetRS的宝可梦图像识别
    IDEA日志操作
    【数据结构笔记03】数据结构之线性表的链式表示和实现(双向链表、循环链表)
    Spring Boot 实现各种参数校验,建议收藏!
    Snipaste 截图悬浮工具【实用教程】
    MySQL 数据库查询缓存
    会计凭证概述、原始凭证、原始凭证的种类、原始凭证的基本内容、原始凭证的填制要求、原始凭证的审核
  • 原文地址:https://blog.csdn.net/weixin_62647396/article/details/137843453