MySQL 进阶学习文档
一、存储引擎
1.1 核心架构
- 四层架构:连接层 → 服务层 → 引擎层 → 存储层
- 插件式存储引擎:不同引擎独立管理数据存储,可动态选择
1.2 主流引擎对比
| 特性 | InnoDB(默认) | MyISAM | Memory |
|---|---|---|---|
| 事务支持 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
| 锁粒度 | 行锁 | 表锁 | 表锁 |
| 外键支持 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
| 存储位置 | 磁盘 | 磁盘 | 内存 |
| 适用场景 | 高并发事务 | 读多写少 | 临时数据缓存 |
选择建议:
- 优先选 InnoDB(支持事务和外键)
- 读多写少且无需事务选 MyISAM
- 临时数据用 Memory
二、索引优化
2.1 索引原理
- B + 树结构:
- 叶子节点存储完整数据(聚集索引)
- 非叶子节点仅存储索引值和指针
- Hash 索引:
- 快速等值查询(
WHERE name='xxx') - 不支持范围查询(
BETWEEN...)
- 快速等值查询(
2.2 索引类型
| 类型 | 说明 | 示例 |
|---|---|---|
| 主键索引 | 唯一标识记录(自动创建) | PRIMARY KEY (id) |
| 唯一索引 | 保证值唯一 | UNIQUE KEY (email) |
| 组合索引 | 多字段联合索引 | INDEX idx_name_age (name, age) |
| 全文索引 | 文本关键词搜索 | FULLTEXT INDEX (content) |
| 索引类型 | 唯一性 | 字段类型 | 适用场景 |
|---|---|---|---|
| 主键索引 | 强制唯一 | 整数、UUID 等 | 表的唯一标识 |
| 唯一索引 | 唯一 | 邮箱、手机号等 | 确保字段值不重复 |
| 常规索引 | 非唯一 | 常用查询字段 | 加速WHERE、ORDER BY |
| 全文索引 | 非唯一 | 文本类型 | 关键词搜索(如文章内容) |
为什么需要不同索引?
- 主键索引:确保数据唯一性,加速数据定位。
- 唯一索引:约束业务规则(如邮箱不能重复)。
- 常规索引:提升查询效率,减少全表扫描。
- 全文索引:支持复杂文本搜索(如
LIKE '%关键词%'的优化)
2.3 索引优化策略
-
最左前缀原则:组合索引需按顺序使用最左字段
-- 有效 SELECT * FROM users WHERE name='Tom' AND age=20; -- 无效(跳过age) SELECT * FROM users WHERE name='Tom' AND gender='M'; -
避免索引失效:
- 不要在索引列上做运算(
WHERE age+1=20) - 字符串不加引号(
WHERE phone=13812345678) - 模糊查询前导 %(
WHERE name LIKE '%Tom')
- 不要在索引列上做运算(
-
覆盖索引:查询字段全部包含在索引中
CREATE INDEX idx_user_info ON users(name, age, email); SELECT name, age FROM users WHERE email='tom@example.com';
三、SQL 性能优化
3.1 执行计划分析
使用EXPLAIN分析查询性能:
EXPLAIN SELECT * FROM orders WHERE status=1;
关键指标解读:
type: 连接类型(ref优于range优于all)key: 实际使用的索引rows: 预估扫描行数Extra:Using index表示覆盖索引
3.2 分页优化
问题:LIMIT 100000,10性能差
优化:
-- 基于覆盖索引
SELECT * FROM orders
WHERE id > (SELECT id FROM orders LIMIT 100000,1)
LIMIT 10;
3.3 锁优化
- 行锁:InnoDB 默认使用行锁(基于索引)
- 表锁:MyISAM 使用表锁,适合低并发场景
- 意向锁:InnoDB 通过意向锁减少锁冲突
四、事务与隔离级别
4.1 事务特性(ACID)
- 原子性:通过
undo log实现回滚 - 一致性:事务前后数据状态一致
- 隔离性:通过锁和 MVCC 实现
- 持久性:通过
redo log保证数据持久化
4.2 隔离级别对比
| 隔离级别 | 脏读 | 不可重复读 | 幻读 | 实现方式 |
|---|---|---|---|---|
| Read Uncommitted | ✅ | ✅ | ✅ | 无锁 |
| Read Committed | ❌ | ✅ | ✅ | 行锁 |
| Repeatable Read | ❌ | ❌ | ✅ | MVCC + 行锁 |
| Serializable | ❌ | ❌ | ❌ | 全表锁 |
推荐:默认使用Repeatable Read,兼顾一致性和性能
五、高级功能
5.1 视图
作用:简化复杂查询,提高安全性
CREATE VIEW v_user_info AS
SELECT id, name, email FROM users WHERE status=1;
5.2 存储过程
示例:计算员工平均薪资
DELIMITER $$
CREATE PROCEDURE GetAvgSalary()
BEGINSELECT AVG(salary) AS avg_salary FROM employees;
END$$
DELIMITER ;
5.3 触发器
示例:记录用户操作日志
CREATE TRIGGER log_user_operation
AFTER UPDATE ON users
FOR EACH ROW
INSERT INTO user_logs(user_id, operation, timestamp)
VALUES(OLD.id, 'update', NOW());
六、InnoDB 引擎深度解析
6.1 核心组件
- Buffer Pool:缓存数据页和索引页
- Change Buffer:优化非唯一索引的写操作
- Redo Log:保证事务持久性
- Undo Log:支持回滚和 MVCC
6.2 MVCC 原理
- 版本链:通过
DB_TRX_ID和DB_ROLL_PTR实现多版本控制 - ReadView:记录活跃事务 ID,决定可见性规则
七、管理工具
7.1 备份恢复
全库备份:
mysqldump -uroot -p --all-databases > full_backup.sql
恢复数据:
mysql -uroot -p < full_backup.sql
7.2 性能监控
-- 查看慢查询日志
SHOW VARIABLES LIKE 'slow_query_log';-- 查看索引使用情况
SELECT index_name, rows_read, rows_index_first
FROM information_schema.table_statistics
WHERE table_schema='your_db';
相关文章:
MySQL 进阶学习文档
一、存储引擎 1.1 核心架构 四层架构:连接层 → 服务层 → 引擎层 → 存储层插件式存储引擎:不同引擎独立管理数据存储,可动态选择 1.2 主流引擎对比 特性InnoDB(默认)MyISAMMemory事务支持✅ 支持❌ 不支持❌ 不支…...
物联网为什么用MQTT不用 HTTP 或 UDP?
先来两个代码对比,上传温度数据给服务器。 MQTT代码示例 // MQTT 客户端连接到 MQTT 服务器 mqttClient.connect("mqtt://broker.server.com:8883", clientId) // 订阅特定主题 mqttClient.subscribe("sensor/data", qos1) // …...
Vmware中的centos7连接上网
有很多刚刚开始配置了centos7,然后发现不能上网现在来解决这个问题。 测试能不能上网 先还原这个设置,如果没有动过的话就不用,连接模式是NAT模式 然后进去设置网络环境,记得是用超级用户设置 vi /etc/sysconfig/network-script…...
【AI知识】常见的优化器及其原理:梯度下降、动量梯度下降、AdaGrad、RMSProp、Adam、AdamW
常见的优化器 梯度下降(Gradient Descent, GD)局部最小值、全局最小值和鞍点凸函数和非凸函数动量梯度下降(Momentum)自适应学习率优化器AdaGrad(Adaptive Gradient Algorithm)RMSProp(Root M…...
线性规划的标准形式
标准形式的定义 目标函数:最大化线性目标函数 其中,x 是决策变量向量,c 是目标系数向量。 约束条件:等式形式约束 A x b, 其中,A 是约束系数矩阵,b 是常数项向量。 变量非负约束: 。 因此…...
网络安全应急入门到实战
奇安信:95015网络安全应急响应分析报告(2022-2024年)官网可以下载 https://github.com/Bypass007/Emergency-Response-Notes 应急响应实战笔记 网络安全应急响应技术实战指南 .pdf 常见场景 第4章 勒索病毒网络安全应急响应 第5章 挖矿木…...
应用程序安全趋势:左移安全、人工智能和开源恶意软件
软件是大多数行业业务运营的核心,这意味着应用程序安全从未如此重要。 随着组织采用云原生架构、微服务和开源组件,攻击面不断扩大。结果是:攻击者渴望利用的易受攻击和恶意依赖项数量不断增加。 2025 年,安全团队将面临日益复杂…...
ospf动态路由
一、为什么使用动态路由 OSPF(open shortest path first开放最短路径优先)是内部网关协议(IGP)的一种,基于链路状态算法(LS)。 OSPF企业级路由协议(RFC2328 OSPFv2),核心重点协议 OSPF共三个版本,OSPFV1主要是实验室…...
【视频】OrinNX+Ubuntu20.04:移植OpenCV-4.11.0 with CUDA(含opencv_contrib )
1、源码下载 github下载地址如下,选择最新版本4.11 https://github.com/opencv/opencv/releases/tag/4.11.0 https://github.com/opencv/opencv_contrib/releases/tag/4.11.02、安装依赖库 1)对图片编码格式的支持 sudo apt install zlib1g-dev libjpeg8-dev libwebp-dev…...
基于单片机控制的电动汽车双闭环调速系统(论文+源码)
2.1系统方案 在本次设计中,其系统整个框图如下图3.1所示,其主要的核心控制模块由电源供电模块,晶振电路,驱动电路模块,霍尔传感器,按键模块,复位电路,LCD液晶显示及直流电机等组成。…...
【病毒分析】伪造微软官网+勒索加密+支付威胁,CTF中勒索病毒解密题目真实还原!
1.背景 该CTF挑战题目完整复现了黑客的攻击链路,攻击者通过伪造钓鱼页面引导受害者下载恶意软件。用户访问伪造的 Microsoft 365 官网后,在点击“Windows Installer (64-bit)”下载选项时,页面会自动跳转至伪造的 GitHub 项目链接࿰…...
PDF Reader Pro for Mac v4.9.0 PDF编辑/批注/OCR/转换工具 支持M、Intel芯片
PDF Reader Pro 是一款用户必备的集管理、编辑、转换、阅读功能于一体的专业的全能PDF阅读专家。快速、易用、强大,让您出色完成 PDF 工作。 应用介绍 PDF Reader Pro,一款功能齐全且强大的PDF阅读和编辑软件。支持PDF阅读、批注、PDF编辑、PDF格式转换…...
神经网络中层与层之间的关联
目录 1. 层与层之间的核心关联:数据流动与参数传递 1.1 数据流动(Forward Propagation) 1.2 参数传递(Backward Propagation) 2. 常见层与层之间的关联模式 2.1 典型全连接网络(如手写数字分类…...
PowerShell 美化 增强教程
PowerShell Windows Terminal 美化 & 增强教程 Windows Terminal PowerShell 默认外观和功能较为基础,但通过 Oh My Posh 及其他增强工具,你可以打造一个更美观、更高效的终端环境。本教程提供完整的安装、美化和优化步骤,包括常见问题…...
机械革命蛟龙16pro玩游戏闪屏
我查过原因,好像是AMD显卡对游戏用了可变刷新率就出bug了,可能是那个游戏不适合用可变刷新率技术。 解决办法: 1.桌面右键鼠标,出现如下标签,点击AMD Software:Adrenalin Edition 2.选择闪屏的游戏&#x…...
《AI赋能云原生区块链,引领供应链溯源革新》
在数字化浪潮席卷全球的当下,供应链管理领域正经历着深刻变革。云原生区块链凭借其去中心化、不可篡改等特性,为供应链溯源带来了前所未有的透明度与可靠性。而AI的融入,更如虎添翼,以强大的智能分析和决策能力,为云原…...
练习题:94
目录 Python题目 题目 题目分析 需求理解 关键知识点 实现思路分析 代码实现 代码解释 while 循环: 获取用户输入: 判断输入内容: 使用 break 语句: 处理非 "quit" 输入: 循环结束后的操作&am…...
实现图片多种处理需求的实用工具
在自媒体创作与日常办公时,图片处理常让人焦头烂额。今天就给大家介绍一款得力帮手——Fotosizer,它能帮你轻松批量处理图片,满足多样化需求。Fotosizer是一款功能强大的图片批量处理软件,无需安装,打开即用࿰…...
数据结构中的引用管理对象体系
数据结构中的引用管理对象体系 (注:似复刻变量即实例对象) 引用管理对象的,有引用就能管理到它所指向的对象,我们拿引用最终的目的就是管理那些我们需要管理的最终直接对象,引用也是对象,同时…...
Qwen2.5-VL 开源视觉大模型,模型体验、下载、推理、微调、部署实战
一、Qwen2.5-VL 简介 Qwen2.5-VL,Qwen 模型家族的旗舰视觉语言模型,比 Qwen2-VL 实现了巨大的飞跃。 欢迎访问 Qwen Chat (Qwen Chat)并选择 Qwen2.5-VL-72B-Instruct 进行体验。 1. 主要增强功能 1)直观地理解事物&…...
qyqt5项目打包成应用程序后,adb命令无效
问题:在Pycharm中执行以下代码能正常输出版本信息,但是使用pyinstaller 打包成pkg之后,运行软件一直都输出不了信息 version_info os.popen(f"adb version").read()解决方案: 配置adb 路径 adb_path os.getenv(ADB_…...
关于Docker是否被淘汰虚拟机实现连接虚拟专用网络Ubuntu 22.04 LTS部署Harbor仓库全流程
1.今天的第一个主题: 第一个主题是关于Docker是否真的被K8S弃用,还是可以继续兼容,因为我们知道在去年的时候,由于不可控的原因,docker的所有国内镜像源都被Ban了,再加上K8S自从V1.20之后,宣布…...
深入解析 `SQL_SMALL_RESULT`:MySQL 的“小优化”大作用
深入解析 SQL_SMALL_RESULT:MySQL 的“小优化”大作用 在 MySQL 的查询优化工具箱中,SQL_SMALL_RESULT 是一个容易被忽略但可能带来小幅性能提升的关键字。它适用于特定场景,尤其是涉及 GROUP BY 或 DISTINCT 计算的小数据集查询。本文将深入…...
RG-S3760应用协议配置
RG-S3760应用协议配置 1. dhcp 服务配置 提问:如何在设备上开启dhcp 服务,让不同VLAN 下的电脑获得相应的IP 地址? 回答: 步骤一:配置VLAN 网关IP 地址,及将相关端口划入相应的VLAN 中 S3760#con t S…...
Vue3 界面设计插件 microi-pageengine 入门教程一
系列文章目录 一、Vue3空项目快速集成 microi-pageengine 插件 文章目录 系列文章目录一、前言二、排版布局2.1 功能导航区2.2 组件容器区2.3 属性面板区 三、数据来源配置3.1 json数据源3.2 html数据源 四、事件穿透五、数据保存持久化六、总结 一、前言 上一篇文章介绍了 v…...
OpenCV-Contrib常用扩展模块
一、高频使用模块 aruco 模块 功能:用于生成与检测二维码(如 ArUco Marker、AprilTag),支持增强现实(AR)中的物体定位与姿态估计。典型应用:AR 应用中的场景锚定、机器人导航…...
诺视Micro-LED微显示芯片量产线投产 ——开启微显示技术新时代
2025年3月19日,诺视科技Micro-LED微显示芯片一期量产线正式投入生产。这一具有里程碑意义的时刻,标志着诺视科技在Micro-LED微显示领域实现了产业化的重大突破,不仅为自身发展奠定了坚实基础,同时也为全球微显示行业带来新的活力。…...
数据库:一文掌握 Oracle 的各种指令(Oracle指令备忘)
文章目录 入门SELECT 语句SELECT INTO 语句INSERT 语句DELETE 语句UPDATE 语句 SEQUENCESCREATE SEQUENCEALTER SEQUENCE从字符串生成查询字符串操作InstrReplaceSubstrTrim DDL SQL创建表添加列修改列删除列约束类型和代码显示约束选择参照约束对表设置约束表上的唯一索引添加…...
java并发编程 juc线程类介绍
Java并发编程实战:深度解析CountDownLatch、CyclicBarrier与Semaphore 引言:线程同步的艺术 在现代多核处理器架构下,高效的并发编程能力已成为Java开发者的必备技能。java.util.concurrent包中的CountDownLatch、CyclicBarrier和Semaphore…...
API接口自动化学习总结
视频:python 做 API接口测试 和 自动化 - 1周入门_哔哩哔哩_bilibili 资料:HTTP协议 - 白月黑羽 要学习接口自动化,先要知道http协议和requests库,后面则是接口手工测试和接口自动化测试。 HTTP协议: HTTP协议简介…...
