MySQL 进阶学习文档

news2025/3/20 10:26:54

一、存储引擎

1.1 核心架构

  • 四层架构:连接层 → 服务层 → 引擎层 → 存储层
  • 插件式存储引擎:不同引擎独立管理数据存储,可动态选择

1.2 主流引擎对比

特性InnoDB(默认)MyISAMMemory
事务支持✅ 支持❌ 不支持❌ 不支持
锁粒度行锁表锁表锁
外键支持✅ 支持❌ 不支持❌ 不支持
存储位置磁盘磁盘内存
适用场景高并发事务读多写少临时数据缓存

选择建议

  • 优先选 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 等表的唯一标识
唯一索引唯一邮箱、手机号等确保字段值不重复
常规索引非唯一常用查询字段加速WHEREORDER BY
全文索引非唯一文本类型关键词搜索(如文章内容)

为什么需要不同索引?

  • 主键索引:确保数据唯一性,加速数据定位。
  • 唯一索引:约束业务规则(如邮箱不能重复)。
  • 常规索引:提升查询效率,减少全表扫描。
  • 全文索引:支持复杂文本搜索(如LIKE '%关键词%'的优化)

2.3 索引优化策略

  1. 最左前缀原则:组合索引需按顺序使用最左字段

    -- 有效
    SELECT * FROM users WHERE name='Tom' AND age=20;
    -- 无效(跳过age)
    SELECT * FROM users WHERE name='Tom' AND gender='M';
    
  2. 避免索引失效

    • 不要在索引列上做运算(WHERE age+1=20
    • 字符串不加引号(WHERE phone=13812345678
    • 模糊查询前导 %(WHERE name LIKE '%Tom'
  3. 覆盖索引:查询字段全部包含在索引中

    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: 预估扫描行数
  • ExtraUsing 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 ReadMVCC + 行锁
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()
BEGIN
  SELECT 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_IDDB_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';

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

物联网为什么用MQTT不用 HTTP 或 UDP?

先来两个代码对比&#xff0c;上传温度数据给服务器。 MQTT代码示例 // MQTT 客户端连接到 MQTT 服务器 mqttClient.connect("mqtt://broker.server.com:8883", clientId) // 订阅特定主题 mqttClient.subscribe("sensor/data", qos1) // …

Vmware中的centos7连接上网

有很多刚刚开始配置了centos7&#xff0c;然后发现不能上网现在来解决这个问题。 测试能不能上网 先还原这个设置&#xff0c;如果没有动过的话就不用&#xff0c;连接模式是NAT模式 然后进去设置网络环境&#xff0c;记得是用超级用户设置 vi /etc/sysconfig/network-script…

【AI知识】常见的优化器及其原理:梯度下降、动量梯度下降、AdaGrad、RMSProp、Adam、AdamW

常见的优化器 梯度下降&#xff08;Gradient Descent, GD&#xff09;局部最小值、全局最小值和鞍点凸函数和非凸函数动量梯度下降&#xff08;Momentum&#xff09;自适应学习率优化器AdaGrad&#xff08;Adaptive Gradient Algorithm&#xff09;​RMSProp&#xff08;Root M…

线性规划的标准形式

标准形式的定义 目标函数&#xff1a;最大化线性目标函数 其中&#xff0c;x 是决策变量向量&#xff0c;c 是目标系数向量。 约束条件&#xff1a;等式形式约束 A x b, 其中&#xff0c;A 是约束系数矩阵&#xff0c;b 是常数项向量。 变量非负约束&#xff1a; 。 因此…

网络安全应急入门到实战

奇安信&#xff1a;95015网络安全应急响应分析报告&#xff08;2022-2024年&#xff09;官网可以下载 https://github.com/Bypass007/Emergency-Response-Notes 应急响应实战笔记 网络安全应急响应技术实战指南 .pdf 常见场景 第4章 勒索病毒网络安全应急响应 第5章 挖矿木…

应用程序安全趋势:左移安全、人工智能和开源恶意软件

软件是大多数行业业务运营的核心&#xff0c;这意味着应用程序安全从未如此重要。 随着组织采用云原生架构、微服务和开源组件&#xff0c;攻击面不断扩大。结果是&#xff1a;攻击者渴望利用的易受攻击和恶意依赖项数量不断增加。 2025 年&#xff0c;安全团队将面临日益复杂…

ospf动态路由

一、为什么使用动态路由 OSPF&#xff08;open shortest path first开放最短路径优先&#xff09;是内部网关协议(IGP)的一种&#xff0c;基于链路状态算法(LS)。 OSPF企业级路由协议(RFC2328 OSPFv2)&#xff0c;核心重点协议 OSPF共三个版本&#xff0c;OSPFV1主要是实验室…

基于单片机控制的电动汽车双闭环调速系统(论文+源码)

2.1系统方案 在本次设计中&#xff0c;其系统整个框图如下图3.1所示&#xff0c;其主要的核心控制模块由电源供电模块&#xff0c;晶振电路&#xff0c;驱动电路模块&#xff0c;霍尔传感器&#xff0c;按键模块&#xff0c;复位电路&#xff0c;LCD液晶显示及直流电机等组成。…

【病毒分析】伪造微软官网+勒索加密+支付威胁,CTF中勒索病毒解密题目真实还原!

1.背景 该CTF挑战题目完整复现了黑客的攻击链路&#xff0c;攻击者通过伪造钓鱼页面引导受害者下载恶意软件。用户访问伪造的 Microsoft 365 官网后&#xff0c;在点击“Windows Installer (64-bit)”下载选项时&#xff0c;页面会自动跳转至伪造的 GitHub 项目链接&#xff0…

PDF Reader Pro for Mac v4.9.0 PDF编辑/批注/OCR/转换工具 支持M、Intel芯片

PDF Reader Pro 是一款用户必备的集管理、编辑、转换、阅读功能于一体的专业的全能PDF阅读专家。快速、易用、强大&#xff0c;让您出色完成 PDF 工作。 应用介绍 PDF Reader Pro&#xff0c;一款功能齐全且强大的PDF阅读和编辑软件。支持PDF阅读、批注、PDF编辑、PDF格式转换…

PowerShell 美化 增强教程

PowerShell Windows Terminal 美化 & 增强教程 Windows Terminal PowerShell 默认外观和功能较为基础&#xff0c;但通过 Oh My Posh 及其他增强工具&#xff0c;你可以打造一个更美观、更高效的终端环境。本教程提供完整的安装、美化和优化步骤&#xff0c;包括常见问题…

机械革命蛟龙16pro玩游戏闪屏

我查过原因&#xff0c;好像是AMD显卡对游戏用了可变刷新率就出bug了&#xff0c;可能是那个游戏不适合用可变刷新率技术。 解决办法&#xff1a; 1.桌面右键鼠标&#xff0c;出现如下标签&#xff0c;点击AMD Software&#xff1a;Adrenalin Edition 2.选择闪屏的游戏&#x…

实现图片多种处理需求的实用工具

在自媒体创作与日常办公时&#xff0c;图片处理常让人焦头烂额。今天就给大家介绍一款得力帮手——Fotosizer&#xff0c;它能帮你轻松批量处理图片&#xff0c;满足多样化需求。Fotosizer是一款功能强大的图片批量处理软件&#xff0c;无需安装&#xff0c;打开即用&#xff0…

数据结构中的引用管理对象体系

数据结构中的引用管理对象体系 &#xff08;注&#xff1a;似复刻变量即实例对象&#xff09; 引用管理对象的&#xff0c;有引用就能管理到它所指向的对象&#xff0c;我们拿引用最终的目的就是管理那些我们需要管理的最终直接对象&#xff0c;引用也是对象&#xff0c;同时…

Qwen2.5-VL 开源视觉大模型,模型体验、下载、推理、微调、部署实战

一、Qwen2.5-VL 简介 Qwen2.5-VL&#xff0c;Qwen 模型家族的旗舰视觉语言模型&#xff0c;比 Qwen2-VL 实现了巨大的飞跃。 欢迎访问 Qwen Chat &#xff08;Qwen Chat&#xff09;并选择 Qwen2.5-VL-72B-Instruct 进行体验。 1. 主要增强功能 1&#xff09;直观地理解事物&…

深入解析 `SQL_SMALL_RESULT`:MySQL 的“小优化”大作用

深入解析 SQL_SMALL_RESULT&#xff1a;MySQL 的“小优化”大作用 在 MySQL 的查询优化工具箱中&#xff0c;SQL_SMALL_RESULT 是一个容易被忽略但可能带来小幅性能提升的关键字。它适用于特定场景&#xff0c;尤其是涉及 GROUP BY 或 DISTINCT 计算的小数据集查询。本文将深入…

Vue3 界面设计插件 microi-pageengine 入门教程一

系列文章目录 一、Vue3空项目快速集成 microi-pageengine 插件 文章目录 系列文章目录一、前言二、排版布局2.1 功能导航区2.2 组件容器区2.3 属性面板区 三、数据来源配置3.1 json数据源3.2 html数据源 四、事件穿透五、数据保存持久化六、总结 一、前言 上一篇文章介绍了 v…

诺视Micro-LED微显示芯片量产线投产 ——开启微显示技术新时代

2025年3月19日&#xff0c;诺视科技Micro-LED微显示芯片一期量产线正式投入生产。这一具有里程碑意义的时刻&#xff0c;标志着诺视科技在Micro-LED微显示领域实现了产业化的重大突破&#xff0c;不仅为自身发展奠定了坚实基础&#xff0c;同时也为全球微显示行业带来新的活力。…

1. 环境准备

安装CentOS 7 配置网络 默认网络是NAT 端口转发 更改/etc/sysconfig/network-scripts/ifcfg-ens33 修改以下内容&#xff1a; BOOTPROTOstatic 启用静态IP地址 ONBOOTyes 开启自动启用网络连接 添加以下内容&#xff1a; IPADDR192.168.30.100 设置IP地址 NETMASK255.25…

【链表】一文搞定链表算法:从基础到实战

提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言例题一、两数相加二、两两交换链表中的节点三、重排链表四、合并K个升序链表五、 K个⼀组翻转链表 结语 前言 什么是链表算法&#xff1a; 链表算法&#xff0…