目录

1. SQL 语句优

1.1 避免低效查询

 1.2 索引优化

1.3 分析执行计划

2. 数据库配置优化

2.1 核心参数调整

2.2 表结构与存储引擎

2.3 存储引擎选择

3. 事务与锁优化

3.1 事务控制

3.2 锁机制优化

3.3 批量操作优化

4. 其他优化手段

4.1 监控与分析工具

4.2 读写分离与分库分表

5. 总结


1. SQL 语句优

1.1 避免低效查询

  • 禁止 SELECT *:明确指定所需字段,减少数据传输和内存消耗。

  • 合理使用 LIMIT:分页查询时通过 LIMIT offset, size 限制返回行数,避免全表扫描。

  • 优化子查询:将部分子查询改写为 JOIN(尤其是关联子查询),例如:

    -- 低效
    SELECT * FROM users WHERE id IN (SELECT user_id FROM orders);
    -- 优化后
    SELECT users.* FROM users JOIN orders ON users.id = orders.user_id;

 1.2 索引优化

  • 创建有效索引:对 WHEREJOINORDER BYGROUP BY 涉及的列建立索引。

  • 避免索引失效常见索引失效原因及解决方案

    • 不在索引列上使用函数或运算(如 WHERE YEAR(create_time) = 2023)。

    • 注意最左前缀原则,联合索引需按顺序使用。

  • 覆盖索引:通过索引直接返回数据,避免回表(如 SELECT id, name FROM users WHERE age=30,若 (age, name) 是联合索引,则无需查表)。

1.3 分析执行计划

  • 使用 EXPLAIN查看执行计划EXPLAIN详解:

    • type 字段:避免 ALL(全表扫描),追求systyem、const、eq_ref、ref、index。

    • Extra 字段:警惕 Using filesort(未利用索引排序)和 Using temporary(临时表)。

2. 数据库配置优化

2.1 核心参数调整

  • 缓冲池大小innodb_buffer_pool_size 设置为物理内存的 70%~80%,确保热点数据在内存中。

  • 连接数配置:合理设置 max_connections(默认 151),避免连接耗尽或资源浪费。

  • 日志优化:增大 innodb_log_file_size(如 1G)和 innodb_log_buffer_size(如 64M),减少磁盘 I/O。

    innodb_buffer_pool_size = 16G
    max_connections = 500
    innodb_log_file_size = 1G

2.2 表结构与存储引擎

  • 选择合适的数据类型:如用 INT 而非 VARCHAR 存储数字,用 DATETIME 替代 TIMESTAMP(需时区时例外)。

  • 范式与反范式平衡:适度冗余减少 JOIN,如高频查询的用户名可冗余到订单表。

  • 分区表:对超大数据表按时间或范围分区,提升查询效率。

2.3 存储引擎选择

  • InnoDB:支持事务、行级锁,适合高并发写入场景(如订单系统)。

  • MyISAM:仅适合读多写少且无需事务的场景(如日志表),因表锁和崩溃恢复能力差。

3. 事务与锁优化

3.1 事务控制

  • 短事务原则:尽早提交事务,避免长事务占用锁资源。

  • 隔离级别选择:默认 REPEATABLE READ 平衡一致性与性能,若允许幻读可降级到 READ COMMITTED

3.2 锁机制优化

  • 行锁升级问题:确保 WHERE 条件走索引,否则 InnoDB 退化为表锁。

  • 死锁预防

    • 按固定顺序访问多张表(如先 A 后 B)。

    • 批量更新时按主键排序。

3.3 批量操作优化

  • 分批提交:如每 1000 条数据 COMMIT 一次,减少锁持有时间。

  • 高效导入:用 LOAD DATA INFILE 替代 INSERT,速度提升 10~100 倍。

4. 其他优化手段

4.1 监控与分析工具

  • 慢查询日志:开启 slow_query_log,捕获执行时间超过 long_query_time(如 2s)的 SQL。

    slow_query_log = 1
    long_query_time = 2
  • Performance Schema:监控锁、I/O、线程等资源使用情况。

4.2 读写分离与分库分表

  • 读多写少时,通过主从复制分散读请求。

  • 数据量极大时,使用分库分表(如 ShardingSphere)。

5. 总结

        MySQL 调优需结合具体场景,通过 分析慢查询调整配置优化事务逻辑 逐步实施。关键点包括:

  • SQL 是核心:低效 SQL 可能抵消所有配置优化。

  • 索引是双刃剑:过多索引影响写入性能。

  • 监控驱动优化:持续观察数据库状态,针对性调整。

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

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

相关文章

VScode单双引号、分号格式

1、settings.json中添加: 1 2 3 "prettier.semi": false, // 取消自动加分号 "prettier.singleQuote": true, // 保持单引号,不自动变双引号 "prettier.trailingComma": "none" // 去掉结尾的逗号 2、如上一步…

自动驾驶规划控制教程——不确定环境下的决策规划

引言:驾驭未知——不确定性下的自动驾驶决策挑战 自动驾驶汽车 (Autonomous Vehicles, AVs) 的愿景是彻底改变交通运输的面貌,提高道路安全、提升交通效率、改善驾乘体验。然而,要将这一愿景安全可靠地付诸实践,自动驾驶系统必须能够在复杂、动态且充满不确定性的真实世界…

电缆中性点概念

电缆中性点概念 电缆中性点(也称“中性点”或“中性线”)是电力系统和电气设备中一个非常重要的概念,尤其在三相电系统中。下面是对中性点概念的系统性解释。 1. 基本定义 中性点:三相电缆(A/B/C相)的电压矢量交汇点,理想情况下三相平衡时该点电压为零。对于星形(Y形…

MyBatis 动态 SQL 详解:灵活构建强大查询

MyBatis 的动态 SQL 功能是其最强大的特性之一,它允许开发者根据不同条件动态生成 SQL 语句,极大地提高了 SQL 的灵活性和复用性。本文将深入探讨 MyBatis 的动态 SQL 功能,包括 OGNL 表达式的使用以及各种动态 SQL 元素(如 if、c…

嵌入式自学第三十天(5.28)

(1)多线程资源竞争问题: 互斥:在多线程中对临界资源的排他性访问。 解决方案:互斥锁 mutex互斥锁在进程pcb块,ret 为0说明别人在用,1说明空闲。 阻塞锁 man pthread_mutex_init man pthread_…

【HW系列】—web常规漏洞(SQL注入与XSS)

SQL注入与XSS攻防解析(安全防御指南) 一、SQL注入基础(防御视角) ​​1. 简介​​ SQL注入是一种通过构造非预期SQL语句操纵数据库的攻击技术。作为开发者,需重点关注输入验证与查询安全,建立全流量监测…

Accelerate 2025北亚巡展正式启航!AI智御全球·引领安全新时代

近日,网络安全行业年度盛会Accelerate 2025北亚巡展正式在深圳启航!智库专家、产业领袖及Fortinet高管、产品技术团队和300余位行业客户齐聚一堂,围绕“AI智御全球引领安全新时代”主题,共同探讨AI时代网络安全新范式。大会聚焦三…

RAG系统构建之嵌入模型性能优化完整指南

导读:在企业级RAG系统的实际部署中,您是否遇到过这样的困扰:嵌入计算成本不断攀升,API调用频繁触及限制,而系统响应速度却始终达不到用户期望?这些看似分散的问题,实际上都指向同一个技术核心&a…

python 自动生成不同行高的word

python 自动生成不同行高的word # -*- coding: utf-8 -*- from docx import Document from docx.shared import Cm, Pt, Inches from docx.oxml import OxmlElement from docx.oxml.ns import qn from docx.enum.text import WD_ALIGN_PARAGRAPHclass DynamicTableGenerator:d…

如何训练意志力

设定清晰的目标 目标需要是具体的,可实现的,有时间限制的。比如不要说“我要锻炼”,而是改成“每周跑步3次,每次30分钟”。 从小事开始 起步通常都是困难的,一开始定一个很大很复杂的任务也超出了自己的能力&#x…

FastAPI 依赖注入

依赖注入常用于以下场景: 共享业务逻辑(复用相同的代码逻辑) 共享数据库连接 实现安全、验证、角色权限 等…… 上述场景均可以使用依赖注入,将代码重复最小化。 创建依赖项 依赖项就是一个函数,且可以使用与路…

接口幂等性原理与方案总结

文章目录 接口幂等概念典型场景核心解决方案一锁二判三更新 方案选型对比 接口幂等概念 定义:无论调用接口多少次,对系统的影响与单次调用一样 范畴:在后端开发中,通常更关注写接口的幂等,因为写接口才会对系统数据造…

【已解决】windows gitbash 出现CondaError: Run ‘conda init‘ before ‘conda activate‘

在 Git Bash 中执行: source /c/Users/你的用户名/miniconda3/etc/profile.d/conda.sh # 注意填入你自己的路径 conda init bash关闭并重新打开 Git Bash 终端。测试激活环境: conda activate your_env_name注意事项 要把上述命令中的 你的用户名 替…

软件包管理系统的架构与生态机制

文章目录 前言一、总结二、如何上传自己的软件包 前言 在日常软件开发中,我们经常使用诸如apt install, pip install, npm install之类的命令,但有一个问题是,这些下载命令是从哪里下载的这些软件包,以及我们是否能上传自己的代码…

Java线程池管理最佳实践(设计模式)

引言 在多线程编程中,线程池是一种非常重要的资源管理工具。合理使用线程池可以显著提高系统性能,避免频繁创建和销毁线程带来的开销。今天,我将为大家深入分析一个实用的ThreadPoolManager实现,它来自com.kingdee.eas.util包&am…

4.8.2 利用Spark SQL计算总分与平均分

在本次实战中,我们的目标是利用Spark SQL计算学生的总分与平均分。首先,我们准备了包含学生成绩的数据文件,并将其上传至HDFS。接着,通过Spark的交互式编程环境,我们读取了成绩文件并将其转换为结构化的DataFrame。然后…

HTML 文件路径完全指南:相对路径、绝对路径解析与引用技巧

一、为什么必须学会文件路径?—— 网页引用资源的 “地址规则” 在 HTML 中,引用图片、CSS、JS 等外部文件时,必须通过文件路径告诉浏览器资源的位置。路径错误会导致资源无法加载(页面出现 broken image 图标或样式丢失&#xf…

keepalived两台设备同时出现VIP问题

目录 问题背景: 日志分析如下: 原因和解决方案总结: 问题背景: keepalived-master和keepalived-slave同时出现了VIP,出现了非对称路由和双主现象 日志分析如下: master能够接受到来自slave的通告消息…

【开源解析】基于PyQt5+Folium的谷歌地图应用开发:从入门到实战

🌐【开源解析】基于PyQt5Folium的谷歌地图应用开发:从入门到实战 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,热情源自每…

篇章五 数据结构——链表(一)

目录 1.ArrayList的缺陷 2. 链表 2.1 链表的概念及结构 2.2 链表结构 1. 单向或者双向 2.带头或者不带头 3.循环或者非循环 2.3 链表的实现 1.完整代码 2.图解 3.显示方法 4.链表大小 5. 链表是否存在 key 值 6.头插法 7.尾插法 8.中间插入 9.删除key值节点 10.…