当前位置: 首页 > news >正文

MYSQL----------------sql 优化

优化 SQL 语句的一般步骤

1. 了解 SQL 的执行频率
SHOW STATUS LIKE 'Com_%';

代码解释

  • SHOW STATUS LIKE 'Com_%';:此命令可以查看各种 SQL 语句的执行频率,例如 Com_select 表示 SELECT 语句的执行次数,Com_insert 表示 INSERT 语句的执行次数等。通过查看这些信息,可以大致了解哪些类型的 SQL 语句被频繁执行,为后续的优化提供方向。
2. 定位执行效率较低的 SQL 语句
  • 通常可以通过慢查询日志来定位执行时间较长的 SQL 语句。在 MySQL 的配置文件中设置 slow_query_log = 1long_query_time(例如 long_query_time = 2,表示执行时间超过 2 秒的查询会被记录),然后查看慢查询日志文件。
3. 通过 EXPLAIN 分析 SQL 的执行计划
EXPLAIN SELECT * FROM table_name WHERE column = 'value';

代码解释

  • EXPLAIN 关键字用于查看 SQL 语句的执行计划,它会输出一系列信息,包括:
    • id:查询的序列号。
    • select_type:查询类型,如 SIMPLEPRIMARYSUBQUERY 等。
    • table:涉及的表名。
    • type:连接类型,从最优到最差依次为 systemconsteq_refrefrangeindexALL
    • possible_keys:可能使用的索引。
    • key:实际使用的索引。
    • rows:估计要扫描的行数。
    • Extra:额外信息,如 Using where 表示使用了 WHERE 子句进行筛选,Using index 表示使用了覆盖索引等。

索引问题

索引的存储分类
  • B-Tree 索引

    • 最常见的索引类型,适用于范围查询、排序和精确匹配。
    • 存储结构是一种平衡多叉树,数据按顺序存储,叶子节点存储实际的数据或指向数据的指针。
  • Hash 索引

    • 适用于精确的等值查询,通过哈希函数将键值映射到存储位置。
    • 不支持范围查询和排序操作。
MySQL 如何使用索引
  • MySQL 会根据查询条件、表结构和索引情况自动选择使用索引。例如,在 SELECT * FROM table WHERE column = 'value'; 中,如果 column 上有索引,MySQL 可能会使用该索引进行查找。

在这里插入图片描述

查看索引的使用情况
SHOW INDEX FROM table_name;

代码解释

  • SHOW INDEX FROM table_name;:该命令可以查看表 table_name 的索引信息,包括索引名称、列名、索引类型等,有助于检查索引的使用情况。

两个简单实用的优化方法

定期分析表和检查表
ANALYZE TABLE table_name;
CHECK TABLE table_name;

代码解释

  • ANALYZE TABLE table_name;:更新表的统计信息,帮助优化器更好地选择执行计划。
  • CHECK TABLE table_name;:检查表的完整性,发现和修复可能的问题。
定期优化表
OPTIMIZE TABLE table_name;

代码解释

  • OPTIMIZE TABLE table_name;:对表进行碎片整理和空间回收,对于经常更新、删除的表很有用。

常用 SQL 的优化

大批量插入数据
INSERT INTO table_name (column1, column2) VALUES (value1, value2), (value3, value4),...;

代码解释

  • 一次插入多行数据可以减少通信开销,提高插入效率,而不是多次执行单行插入。
优化 INSERT 语句
  • 尽量减少不必要的索引,因为插入数据时需要更新索引,过多的索引会影响插入性能。
优化 GROUP BY 语句
  • 确保 GROUP BY 子句中的列有索引,避免使用 GROUP BY 进行排序时产生临时表。
优化 ORDER BY 语句
  • 尽量在 ORDER BY 列上创建索引,使排序操作更高效。
优化嵌套查询
  • 尽量将嵌套查询转换为连接查询,因为连接查询通常比嵌套查询性能更好。
MySQL 如何优化 OR 条件
  • 对于 WHERE column1 = 'value1' OR column2 = 'value2' 这样的语句,如果 column1column2 上都有索引,MySQL 可能无法同时使用两个索引。可以考虑使用 UNION 来改写,例如:
(SELECT * FROM table WHERE column1 = 'value1') UNION (SELECT * FROM table WHERE column2 = 'value2');
使用 SQL 提示
  • 可以使用 USE INDEXFORCE INDEX 等 SQL 提示强制使用某个索引或避免使用某个索引,例如:
SELECT * FROM table USE INDEX (index_name) WHERE column = 'value';

小结

  • 优化步骤

    • 首先通过 SHOW STATUS 了解 SQL 语句的执行频率,定位慢查询,再使用 EXPLAIN 分析执行计划。
    • 根据 EXPLAIN 的结果确定问题,如是否使用了合适的索引,是否产生了额外的临时表等。
  • 索引方面

    • 了解 B-Tree 和 Hash 索引的特点和适用场景,合理创建和使用索引,通过 SHOW INDEX 查看索引使用情况。
  • 实用优化方法

    • 定期进行 ANALYZE TABLECHECK TABLEOPTIMIZE TABLE 操作,维护表的性能。
  • 具体 SQL 优化

    • 对于大批量插入使用多行插入语句,优化 INSERTGROUP BYORDER BY 语句,尽量将嵌套查询转换为连接查询,优化 OR 条件,使用 SQL 提示辅助优化。

在实际的 SQL
优化过程中,需要综合考虑各种因素,根据具体的查询和表结构,灵活运用上述优化方法,以提高数据库的性能。同时,要注意优化过程中可能带来的其他问题,如索引过多会影响数据更新性能,过度优化可能导致维护成本增加等。通过不断的实践和经验积累,可以更好地掌握
SQL 优化的技巧。

相关文章:

MYSQL----------------sql 优化

优化 SQL 语句的一般步骤 1. 了解 SQL 的执行频率 SHOW STATUS LIKE Com_%;代码解释: SHOW STATUS LIKE Com_%;:此命令可以查看各种 SQL 语句的执行频率,例如 Com_select 表示 SELECT 语句的执行次数,Com_insert 表示 INSERT 语…...

深度学习中的正则化方法

最近看到了正则化的内容,发现自己对正则化的理解已经忘得差不多了,这里在整理一下,方便以后查阅。 深度学习中的正则化方法 1. L2 正则化(L2 Regularization)2. L1 正则化(L1 Regularization)3.…...

前端报告 2024:全新数据,深度解析未来趋势

温馨提示: 此报告为国际版全球报告,其中所涉及的技术应用、工具偏好、开发者习惯等情况反映的是全球前端开发领域的综合态势。由于国内外技术发展环境、行业生态以及企业需求等存在差异,可能有些内容并不完全契合国内的实际情况,请大家理性阅读,批判性地吸收其中的观点与信…...

计算机网络之---子网划分与IP地址

子网划分与IP地址的关系 在计算机网络中,子网划分(Subnetworking)是将一个网络划分为多个子网络的过程。通过子网划分,可以有效地管理和利用IP地址空间,提高网络的性能、安全性和管理效率。 子网划分的基本目的是通过…...

计算机网络 (31)运输层协议概念

一、概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。运输层的一个核心功能是提供从源端主机到目的端主机的可靠的、与实际使用的网络无关的信息传输。它向高层用…...

代码随想录算法训练营day28

代码随想录算法训练营 —day28 文章目录 代码随想录算法训练营前言一、122.买卖股票的最佳时机II二、55. 跳跃游戏三、跳跃游戏 II方法一方法二 1005. K 次取反后最大化的数组和总结 前言 今天是算法营的第28天,希望自己能够坚持下来! 今日任务&#x…...

建立时间和保持时间

建立时间 在时钟有效沿到来之前,数据必须维持一段时间保持不变,这段时间就是建立时间 Tsetup 1 基本概念 建立时间(Setup Time): 在 SystemVerilog 中,建立时间是指在时钟信号的有效边沿(例如…...

vue,router路由传值问题,引用官方推荐

参考贴https://blog.csdn.net/m0_57033755/article/details/129927829 根据官方文档的更新日志,建议使用state传值 官方文档更新日志 实际的console结果 传值 router.push({ name: KnowledgeDetail, state: { params } });接收值 const historyParams histor…...

AIDD-人工智能药物设计-AlphaFold系列:年终回顾,AlphaFold迄今为止的实际应用案例

AlphaFold系列:年终回顾,AlphaFold迄今为止的实际应用案例 01 引言 AlphaFold由 DeepMind 团队开发,最初在蛋白质结构预测竞赛 CASP 中惊艳亮相。随着 AlphaFold2 和后续版本的迭代进步,其精度和通用性不断提升,逐渐走…...

Scala语言的面向对象编程

Scala语言的面向对象编程 引言 在当今的软件开发中,面向对象编程(OOP)是一种非常强大且广泛使用的编程范式。Scala是一种现代编程语言,结合了面向对象编程和函数式编程的特性,非常适合用于大规模软件的开发。本文将介…...

MySQL学习记录1【DQL和DCL】

SQL学习记录 该笔记从DQL处开始记录 DQL之前值得注意的点 字段 BETWEEN min AND max 可以查询区间[min, max]的数值如果同一个字段需要满足多个OR条件,可以采取 字段 IN(数值1, 数值2, 数值3....)LIKE语句 字段 LIKE ___%%% 表示模糊匹配,_匹配一个字段…...

验证码转发漏洞

开发人员有时候会以数组的形式接收用户的手机号并遍历执行,这时就可以在注册或登录页面填写两个手机号并点击发送验证码,这两个手机号会同时收到相同验证码,可以用任意一个手机号登录或注册,即验证码转发漏洞。 1、burpsuite内置…...

使用 C++ 实现神经网络:从基础到高级优化

引言 在现代机器学习中,神经网络已经成为最重要的工具之一。虽然 Python 提供了诸如 TensorFlow、PyTorch 等强大的机器学习库,但如果你想深入理解神经网络的实现原理,或者出于某些性能、资源限制的考虑,使用 C 来实现神经网络会是…...

【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)

目录 ./real.exe错误1:ERROR while reading namelist physics./wrf.exe错误1:FATAL CALLED FROM FILE: <stdin> LINE: 2419 Warning: too many input landuse types参考./real.exe 错误1:ERROR while reading namelist physics 执行./real.exe时,报错如下: taski…...

Kotlin语言的循环实现

Kotlin语言中的循环实现 Kotlin是一种现代的、跨平台的编程语言&#xff0c;广泛应用于Android开发、后端服务及多种其他软件开发领域。与Java类似&#xff0c;Kotlin也支持多种循环结构&#xff0c;包括for循环、while循环和do while循环。掌握这些循环结构是每个Kotlin开发者…...

基于CNN的人脸识别考勤管理系统实现

随着技术的不断进步&#xff0c;人脸识别技术已经在各行各业得到了广泛的应用&#xff0c;尤其在 考勤管理 上&#xff0c;它提供了更加智能、便捷、精准的解决方案。本篇博客将介绍如何基于 PyQt5 和 MySQL 实现一个 人脸识别考勤系统&#xff0c;并通过具体代码展示如何通过图…...

Android基于回调的事件处理

Android 中的回调机制&#xff1a;基于回调的事件处理详解 在 Android 开发中&#xff0c;回调&#xff08;Callback&#xff09;是一种常见的事件处理机制&#xff0c;主要用于异步操作和事件通知。与传统的基于监听器的事件处理相比&#xff0c;回调机制更加灵活、通用&…...

postgis和地理围栏

postgis postgis是pg数据库的一个插件&#xff0c;除原数据类型外(int varchar)、新增了空间数据类型(geography和geometry)。比如我们新建一张道路表road(字段有名称varchar、建设时间timestamp、地理位置geometry)&#xff0c;可以将道路名字、建设时间存进去&#xff0c;同…...

《鸿蒙系统AI技术:筑牢复杂网络环境下的安全防线》

在当今数字化时代&#xff0c;复杂网络环境给智能系统带来了诸多安全挑战&#xff0c;而鸿蒙系统中的人工智能技术却展现出强大的安全保障能力&#xff0c;为用户在复杂网络环境中的安全保驾护航。 微内核架构&#xff1a;安全基石 鸿蒙系统采用微内核架构&#xff0c;将核心…...

SQL SERVER__RSN 恢复的深入解析

1. RSN 的工作原理 RSN 是 SQL Server 内部用于跟踪和管理备份和恢复操作顺序的编号。每次数据库备份&#xff08;包括完整备份、差异备份和事务日志备份&#xff09;都会生成一个唯一的 RSN。SQL Server 在恢复过程中使用 RSN 来确保备份文件按正确的顺序应用&#xff0c;从而…...

Spring原理(Bean的生命周期)

一、Bean的作用域Bean 的作⽤域是指 Bean 在 Spring 框架中的某种⾏为模式。⽐如单例作⽤域: 表⽰ Bean 在整个 Spring 中只有⼀份, 它是全局共享的. 那么当其他⼈修改了这个值之后, 那么另⼀个⼈读取到的就是被修改的值作用域说明singleton每个SpringIoc容器内同名称的Bean只有…...

网站 SEO 优化检查需要检查哪些方面

网站 SEO 优化检查需要检查哪些方面 在当今互联网时代&#xff0c;一个网站的成功与否在很大程度上取决于其在搜索引擎上的表现。搜索引擎优化&#xff08;SEO&#xff09;是提升网站在搜索结果中排名的重要手段。但是&#xff0c;SEO 并不是一劳永逸的事情&#xff0c;需要持…...

Selenoid API完全解析:从会话管理到资源监控的终极指南

Selenoid API完全解析&#xff1a;从会话管理到资源监控的终极指南 【免费下载链接】selenoid Selenium Hub successor running browsers within containers. Scalable, immutable, self hosted Selenium-Grid on any platform with single binary. 项目地址: https://gitcod…...

CAN总线终端电阻原理与工程实践详解

1. CAN总线终端电阻的核心作用解析在工业控制和汽车电子领域&#xff0c;CAN总线是最常用的现场总线之一。作为从业十余年的嵌入式工程师&#xff0c;我处理过无数CAN总线异常案例&#xff0c;其中约30%的通信故障都与终端电阻配置不当有关。120Ω这个看似简单的参数&#xff0…...

XPT2046触摸驱动设计与车载嵌入式集成实践

1. XPT2046 触摸控制器驱动技术解析与嵌入式集成实践XPT2046 是一款广泛应用于嵌入式人机交互系统的 12 位逐次逼近型&#xff08;SAR&#xff09;模数转换器&#xff08;ADC&#xff09;&#xff0c;专为四线/五线电阻式触摸屏设计。其核心功能并非独立显示驱动&#xff0c;而…...

BK1086/88 DSP收音机Arduino库详解

1. 项目概述PU2CLR BK108X 是一款专为 BEKEN BK1086 和 BK1088 高集成度数字信号处理&#xff08;DSP&#xff09;广播接收芯片设计的 Arduino 库。该库并非通用型通信封装&#xff0c;而是面向射频接收系统工程实践的底层控制框架&#xff0c;其核心价值在于将芯片复杂的寄存器…...

Go接口interface与鸭子类型

Go语言中的接口与鸭子类型编程 在编程世界中&#xff0c;Go语言的接口&#xff08;interface&#xff09;和鸭子类型&#xff08;Duck Typing&#xff09;是两种灵活而强大的设计模式。它们通过解耦类型与行为&#xff0c;让代码更具扩展性和可维护性。Go的接口不同于其他语言…...

YOLO X Layout实战案例:政务公文自动识别Title/Section-header/Page-footer三级结构

YOLO X Layout实战案例&#xff1a;政务公文自动识别Title/Section-header/Page-footer三级结构 1. 项目背景与价值 政务公文处理是政府日常工作中的重要环节&#xff0c;每天都有大量的公文需要整理、归档和数字化。传统的人工处理方式效率低下&#xff0c;容易出错&#xf…...

Sen2Cor批处理实战:从L1C到L2A,如何确保你的大气校正结果不受处理基线影响?

Sen2Cor批处理实战&#xff1a;处理基线对L2A大气校正结果的影响解析 第一次用Sen2Cor处理完200景Sentinel-2数据后&#xff0c;我发现同一地区的NDVI值在不同时期竟然出现了断崖式下跌——不是植被变化&#xff0c;而是处理基线在作祟。这个教训让我意识到&#xff0c;批量大气…...

C++20 协同调度原语:利用 std::atomic::wait/notify 实现低功耗自旋锁在高并发下的快速响应协议

各位同仁&#xff0c;女士们&#xff0c;先生们&#xff0c;欢迎来到今天的技术讲座。在现代C编程中&#xff0c;高性能与低功耗的追求从未停止。随着多核处理器的普及和异步编程模型的兴起&#xff0c;对并发原语的精细化控制变得尤为关键。C20标准为我们带来了诸多激动人心的…...