sql调优
线上发现部分sql查询时间过长。使用explain观察是否命中表的索引。未命中索引,使用 TABLE add index 语句添加索引。在这里插入图片描述
除此之外,单个字段命中联合索引的情况也会导致查询变慢在这里插入图片描述

针对多个字段的查询可添加联合索引。
总结如下慢sql的原因:
一、查询语句本身的问题
查询语句的编写是否高效,直接影响执行效率,常见问题包括:

  1. 未使用索引,或条件无法命中索引时
    • 当查询未使用索引,或条件无法命中索引时,数据库会遍历整个表的所有行,尤其对于大表(百万级以上数据),耗时会急剧增加。
    • 例:SELECT * FROM orders WHERE amount > 1000;amount字段无索引,会触发全表扫描。
  2. 使用SELECT *查询所有列
  3. 复杂的联表查询(JOIN)
    • 多表联表时未指定有效的关联条件(如ON子句缺失或不合理),导致产生笛卡尔积(行数呈指数级增长)。
    • 联表顺序不合理:数据库优化器可能因表大小或统计信息不准确,选择低效的联表顺序(如小表驱动大表更高效,反之则耗时)。
  4. 子查询嵌套过深
    • 多层嵌套的子查询(尤其是IN子句中的子查询)可能被数据库多次执行,而非一次性优化,导致重复计算。
    • 例:SELECT * FROM users WHERE id IN (SELECT user_id FROM orders WHERE status=1); 若子查询返回大量数据,效率会很低。同理避免in()中有大量数据。
  5. 排序和分组操作低效
    • ORDER BYGROUP BYDISTINCT等操作需要对数据进行排序或聚合,若涉及数据量过大且无索引支持,会触发临时表或文件排序(磁盘IO耗时远高于内存)。
      二、索引相关问题
      索引是提升查询效率的核心,但不合理的索引设计或使用会适得其反:
  6. 缺少必要的索引
    • 查询的过滤条件(WHERE)、联表条件(JOIN ON)、排序字段(ORDER BY)等未建立索引,导致全表扫描或低效扫描。
  7. 索引失效
    • 索引字段被函数或表达式操作:如WHERE SUBSTR(name, 1, 1) = 'A',会使索引失效。
    • 使用不等号(!=<>)、NOT INIS NULL(部分数据库)、模糊查询前缀带%(如LIKE '%abc'),可能导致索引失效。
    • 联合索引未遵循“最左前缀原则”:如联合索引(a, b, c),查询条件仅用bc时,无法命中索引。
  8. 索引过多
    • 表上索引数量过多,会导致INSERTUPDATEDELETE操作变慢(因为每次修改数据需同步更新索引),同时索引本身会占用磁盘空间,增加查询时的索引选择成本。
  9. 索引碎片化
    • 频繁的更新或删除操作会导致索引页碎片化(存储空间不连续),查询时需要多次读取磁盘,降低效率。
      三、数据库设计问题
      不合理的表结构或数据分布会长期影响查询性能:
  10. 表结构设计不合理
    • 表字段过多(宽表)或字段类型不合适(如用VARCHAR(255)存储手机号,而非CHAR(11)),导致单条记录体积过大,扫描时IO成本高。
    • 未进行分表分库:大表(如千万级以上数据)未按时间、地区等维度拆分,单表数据量过大,查询耗时自然增加。
  11. 数据分布不均
    • 表中存在“热点数据”(如某类记录占比90%以上),即使有索引,查询这类数据时仍需扫描大量索引页(类似全表扫描)。
    • 例:WHERE status=0,若90%的记录status都是0,索引可能失效,转为全表扫描。
  12. 缺少分区表设计
    • 对于时间序列数据(如日志、订单),未按时间分区(如按月份),查询历史数据时仍需扫描全表,而分区表可仅扫描目标分区。
      四、数据库配置与状态问题
      数据库的运行状态和配置参数也会影响查询效率:
  13. 统计信息过时
    • 数据库优化器依赖表的统计信息(如行数、字段分布、索引基数)生成执行计划,若统计信息过时(如长期未更新),可能选择低效计划(如错误地走全表扫描而非索引)。
    • 解决:定期执行ANALYZE TABLE(MySQL)或UPDATE STATISTICS(SQL Server)更新统计信息。
  14. 连接数或资源限制
    • 数据库连接数已满,查询需等待释放连接,导致“排队耗时”。
    • 内存、CPU资源不足:查询需要的内存(如排序缓存、连接缓存)被耗尽,被迫使用磁盘临时表,或CPU被其他进程占用,处理速度下降。
  15. 锁等待或事务阻塞
    • 若查询涉及的表或行被其他事务锁定(如SELECT ... FOR UPDATE未及时提交),当前查询会进入等待状态,直到锁释放,表现为“查询超时”。
      五、硬件与环境问题
      底层硬件或部署环境的瓶颈也可能导致查询缓慢:
  16. 磁盘IO性能不足
    • 机械硬盘(HDD)读写速度远低于固态硬盘(SSD),若数据库文件存储在HDD,且存在大量随机IO(如索引扫描),会成为瓶颈。
    • 磁盘空间不足,导致临时文件读写效率下降。
  17. 内存不足
    • 数据库缓存(如MySQL的InnoDB Buffer Pool、Oracle的SGA)不足,频繁将数据从磁盘加载到内存,增加IO次数。
      总结
      SQL查询慢的原因可归纳为:查询不优、索引不当、表设计不合理、数据库状态异常、硬件资源不足。排查时可通过执行计划(如EXPLAIN命令)分析查询路径,结合数据库监控工具(如MySQL的SHOW PROCESSLIST、SQL Server的 Profiler)定位具体瓶颈,再针对性优化(如加索引、改写查询、分表分库等)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92005.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92005.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/92005.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在nuxt项目中使用axios进行网络请求?

在 Nuxt 项目中使用 Axios 进行网络请求有两种常用方式&#xff1a;一是直接安装 Axios 并全局配置&#xff0c;二是使用 Nuxt 官方推荐的 nuxtjs/axios 模块&#xff08;更便捷&#xff09;。以下是详细步骤&#xff1a; 方法一&#xff1a;使用官方推荐的 nuxtjs/axios 模块&…

Unity 实现手机端和电脑项目在局域网内通信

电脑端启动后自动广播自身存在&#xff0c;手机端启动后监听广播并发现服务器。发现后自动建立 UDP 连接&#xff0c;双方可互发消息。内置心跳检测&#xff0c;网络中断时会自动检测并提示断开using UnityEngine; using System.Net; using System.Net.Sockets; using System.T…

C++_389_定义一个禁用了赋值操作、具有线程同步资源保护的结构体,作为一些回调函数的参数,方便获取响应操作的结果等信息

/* 回调参数。注意:此结构体禁用了赋值,会编译报错 */struct API_CALLBACK_T{public:API_CALLBACK_T(){eRet = e_fail;bWait = true;

uniapp基础 (一)

目录 UniApp 是什么&#xff1f;有什么优势 跨平台高效开发 Vue.js 技术生态 插件生态丰富 渐进式开发支持 UniApp 跨平台兼容的实现原理 编译时转 运行时适配层 条件编译 性能优化策略 1.预编译模 2.原生组件混合渲 3.分包加载 UniApp 的生命周期钩子有哪些&#x…

【图像算法 - 10】进阶入门:改进 YOLO11 安全帽检测的关键参数与场景适配

一、项目背景与需求 视频全文介绍 【图像算法 - 10】进阶入门&#xff1a;改进 YOLO11 安全帽检测的关键参数与场景适配今天我们使用深度学习来训练一个安全帽检测系统&#xff0c;基于YOLO11的安全帽检测系统。我们使用了两万张图片的数据集训练了这次的基于YOLO11的安全帽检…

【C 学习】04.1-类型转换浮点数

“知道做不到就是不知道”一、类型转换1.自动类型转换&#xff1a;当运算符&#xff08;常见、-、*、/、%&#xff09;两边出现不一致的类型时&#xff0c;编译器会自动转换成较大的&#xff08;范围更大&#xff09;类型。从小到大&#xff1a;char-short-int-long-long long;…

基于反事实对比学习的鲁棒图像表征|文献速递-医学影像算法文献分享

Title题目Robust image representations with counterfactual contrastive learning基于反事实对比学习的鲁棒图像表征01文献速递介绍医学影像中的对比学习已成为利用未标记数据的有效策略。这种自监督学习方法已被证明能显著提升模型跨领域偏移的泛化能力&#xff0c;并减少训…

机器学习(5):朴素贝叶斯分类算法

贝叶斯的核心思想就是&#xff0c;谁的概率高就归为哪一类。贝叶斯推论P(A):先验概率。即在B事件发生之前&#xff0c;我们对A事件概率的一个判断。P(A|B)&#xff1a;后验概率。即在B事件发生之后&#xff0c;我们对A事件概率的重新评估。P(B|A)/P(B)&#xff1a;可能性函数。…

Docker 容器内进行 frp 内网穿透

开始之前需要有一台可以进行公网访问的服务器 下载安装 frp 这个直接到 github 官网就可以下载了 点击Releases 就可以查看到可以下载的源&#xff0c;根据自己电脑的型号进行选择就好了。 linux服务器上下载 如果是在linux的服务器上的话可以直接通过wget进行下载 例如&a…

复制网页文字到Word、WPS文字?选中后直接拖放

要把网页、PDF或其他应用中的文字内容复制到Word、WPS文字、记事本等&#xff0c;不一定要先复制、再粘贴&#xff0c;也可以选中文字后直接拖动到目标位置即可。多次操作&#xff0c;可以把窗口并排再拖动。如果你经常需要在不同应用之间引用文字&#xff0c;不妨试一试。操作…

Starrocks中的 Query Profile以及explain analyze及trace命令中的区别

背景 本文基于Starrocks 3.5.5 现有公司因为业务的不同&#xff0c;可能会更加关系单个SQL 的RT&#xff0c;因为如果一个SQL的RT比较大的话&#xff0c;影响的就是这个业务&#xff0c;从而影响收入&#xff0c;所以对于这方面我们就比较关心&#xff0c; 而最近在基于Starro…

网络 —— 笔记本(主机)、主机虚拟机(Windows、Ubuntu)、手机(笔记本热点),三者进行相互ping通

背景介绍最近在笔记本电脑上的虚拟机(Ubuntu、Windows Server搭配)上部署了"WD"开源手游服务器(旧版本)&#xff0c;手机连接上了笔记本电脑开启的WIFI热点&#xff0c;同时手机上安装了"WD"手游客户端。于是首先得保证网络相互畅通才能玩游戏&#xff0c;…

裸露土堆识别准确率↑32%:陌讯多模态融合算法在生态监测的实战解析

原创声明本文为原创技术解析文章&#xff0c;涉及技术参数及架构描述均参考《陌讯技术白皮书》&#xff0c;禁止任何形式的转载与抄袭。一、行业痛点&#xff1a;裸露土堆识别的现实挑战在生态环境保护、建筑工地监管等场景中&#xff0c;裸露土堆的精准识别是遏制扬尘污染、防…

网站从HTTP升级到HTTPS网址方法

将网站从HTTP升级到HTTPS涉及几个关键步骤&#xff0c;以确保安全连接以及用户和搜索引擎的平稳过渡。获取并安装SSL/TLS证书&#xff1a;1、从CA机构授权提供商Gworg获取SSL/TLS证书。选项包括域名验证(DV)、组织验证(OV)和扩展验证(EV)证书&#xff0c;验证严格度各不相同&am…

WaitForSingleObject 函数参数影响及信号处理分析

一、第二个参数&#xff08;超时时间&#xff09;的影响 DWORD result WaitForSingleObject(hHandle, 1000);中的第二个参数1000表示等待超时时间为1000毫秒&#xff08;1秒&#xff09;&#xff0c;其核心影响如下&#xff1a; 1. 函数行为控制 立即返回&#xff1a;若对象已…

dbeaver导入数据及配置讲解

导入数据教程&#xff1a; 前提.csv文件&#xff1a;且只能导入一个sheet点击下一步选中导入的.csv文件对应好数据字段和表字段&#xff0c;感觉不需要导入的可以skip配置一下&#xff0c;下面有介绍&#xff1a;以下为你详细解析这些数据加载相关功能的含义与作用&#xff1a;…

JAVA学习笔记 自增与自减的使用-006

目录 1 基本概述 2 自增与自减的用法 2.1单独使用 2.2 参与运算 3 思考与练习 3.1 基础题 3.2 中等题 3.3 进阶题 4 总结 源计划&#xff1a;我从来不认为自己的成功过程有多心酸&#xff0c;只是心中不惧失败&#xff0c;能够承受别人不能接受的失望而已&#xff01;…

从LCM到SomeIP,再到DDS:技术演进与工作原理剖析

文章目录一、LCM&#xff1a;轻量级通信与编组库工作原理C 代码示例局限性二、SomeIP&#xff1a;面向服务的可扩展中间件工作原理C 代码示例优势与特点三、DDS&#xff1a;数据分发服务工作原理C 代码示例优势与应用场景四、技术演进总结在分布式系统通信领域&#xff0c;技术…

Redis里面什么是sdshdr,可以详细介绍一下吗?

文章目录为什么 Redis 不直接使用 C 语言的字符串&#xff1f;sdshdr 的结构sdshdr 的不同类型sdshdr 带来的优势总结我们来详细解析一下 Redis 的核心数据结构之一&#xff1a; sdshdr。sdshdr 是 “Simple Dynamic String header” 的缩写&#xff0c;意为“简单动态字符串头…

RocketMq如何保证消息的顺序性

文章目录1.顺序消息的全流程1.1 发送阶段&#xff1a;消息分区1.2.存储阶段&#xff1a;顺序写入1.3.消费阶段&#xff1a;串行消费2.第三把锁有什么用?3.顺序消费存在的问题和Kafka只支持同一个Partition内消息的顺序性一样&#xff0c;RocketMQ中也提供了基于队列(分区)的顺…