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

MySQL进阶知识点(六)---- 存储引擎

一、 MySQL 体系结构

为了更好地理解存储引擎,首先需要了解 MySQL 的总体架构,可以分为四层:

层级组件说明
连接层连接池、身份验证负责客户端连接管理、权限认证等
服务层SQL接口、解析器、优化器、查询缓存负责SQL语句的解析、优化、以及内置函数、触发器等
引擎层可插拔存储引擎核心! 负责数据的存储和提取。服务器通过API与存储引擎通信
存储层文件系统、日志将数据存储在硬盘上,包括redo log、undo log、数据文件等

核心思想:MySQL 的架构设计使得其存储引擎层是可插拔的。这意味着你可以为不同的表选择不同的存储引擎,以适应各种应用场景。


二、 存储引擎简介

1. 什么是存储引擎?

存储引擎是数据库底层软件组件,它规定了数据如何存储、如何索引、如何更新和查询。不同的存储引擎提供不同的功能和特性。

2. 查看支持的存储引擎
SHOW ENGINES;
3. 查看/修改表的存储引擎
-- 查看某张表的存储引擎
SHOW CREATE TABLE table_name;-- 创建表时指定存储引擎
CREATE TABLE table_name (...) ENGINE=InnoDB;-- 修改已存在表的存储引擎
ALTER TABLE table_name ENGINE=MyISAM;

三、 存储引擎特点

MySQL 支持多种存储引擎,其中最主流的是 InnoDB 和 MyISAM

InnoDB (MySQL 5.5.8 后成为默认存储引擎)
特性描述
事务支持✅ 支持 ACID 事务,具有提交(commit)和回滚(rollback)能力
外键约束✅ 支持 外键约束,保证数据完整性
锁机制🔒 行级锁,支持并发写入,大大减少锁冲突,适合高并发
崩溃恢复✅ 通过 redo log 和 undo log 提供优秀的崩溃恢复能力
存储方式所有表和数据存储在表空间中(如 ibdata1 文件),或按表文件存储(innodb_file_per_table=ON
MVCC✅ 支持多版本并发控制,提高并发读写性能

适用场景

  • 需要事务支持(如银行转账、订单系统)

  • 高并发读写(行级锁优势明显)

  • 需要外键约束来保证数据完整性

  • 绝大多数 OLTP (联机事务处理) 应用

MyISAM (MySQL 5.5 之前的默认引擎)
特性描述
事务支持❌ 不支持
外键约束❌ 不支持
锁机制🔒 表级锁,并发写入性能差(读锁和写锁是互斥的)
崩溃恢复❌ 较差
存储方式每个表在磁盘上存储为三个文件:
.frm(表结构)、.MYD(数据)、.MYI(索引)
全文索引✅ 支持(在早期版本中是优势)
压缩性✅ 支持压缩表,适合只读数据

适用场景

  • 只读或读多写少的应用

  • 不需要事务

  • 数据仓库、报表系统等查询密集型且对数据一致性要求不高的场景

其他存储引擎简要对比
引擎主要特点适用场景
Memory数据存储在内存中,速度极快;服务器重启后数据丢失缓存、临时表、会话存储
Archive只支持INSERT和SELECT,高压缩比日志记录、数据归档
CSV以CSV格式存储数据数据交换

四、 InnoDB vs MyISAM 核心区别总结

对比项InnoDBMyISAM
事务✅ 支持❌ 不支持
外键✅ 支持❌ 不支持
锁级别行级锁表级锁
并发性能(写操作)(写操作)
崩溃恢复✅ 安全,支持❌ 不安全
全文索引✅ MySQL 5.6+ 支持✅ 支持(早期版本优势)
存储文件.frm + ibdata1 / .ibd.frm + .MYD + .MYI
COUNT(*)需要全表扫描(无WHERE时)直接返回保存的计数(极快)

五、 存储引擎选择

选择存储引擎需要根据应用的核心需求来决定。

需求场景推荐引擎理由
绝大多数通用业务场景InnoDB ✅支持事务、行级锁、外键,数据安全性和并发性能是首要考虑
读远大于写,且不需要事务MyISAM在只读或轻度写入场景下,COUNT(*) 等特定操作更快
需要全文索引 (MySQL 5.6前)MyISAM早期版本中唯一支持全文索引的引擎
临时数据、高速缓存Memory数据存储在内存中,读写速度极快
日志记录、数据归档Archive极高的压缩比,节省存储空间

六、现代 MySQL 开发的黄金法则

除非有非常特殊且合理的理由,否则请始终使用 InnoDB 存储引擎。

  • 自 MySQL 5.5.8 起,InnoDB 已成为默认引擎

  • 它提供了事务安全行级锁,这是现代应用程序的基石。

  • 在大多数情况下,其性能已经优于或等同于 MyISAM。

  • MySQL 8.0 中,MyISAM 的相关系统表也已被 InnoDB 替代,这预示着其未来的地位。

小结

存储引擎是 MySQL 数据库的心脏,它决定了数据的存储方式、事务能力、并发控制和可靠性。理解不同存储引擎的特点,并根据业务需求做出正确选择,是构建高性能、高可用数据库应用的关键一步。在当今,InnoDB 是你不二的选择

http://www.dtcms.com/a/422511.html

相关文章:

  • 2025.8.10-学习C++(一)
  • QAxios研发笔记(一):在Qt环境下,构建Promise风格的Get请求接口
  • 【OpenGL】复杂光照理论与实践
  • Binder和IBinder
  • 标准化考场建设方案解析:全频阻断作弊防控系统介绍
  • 网站开发 团队协作h5响应式 wordpress
  • 通义万相2.5系列模型发布,可生成音画同步视频
  • Transformer实战(20)——微调Transformer语言模型进行问答任务
  • Vue3和element plus在el-table中使用el-tree-select遇到的change事件坑
  • my sql 常用函数及语句的执行顺序
  • adb安装教程(附adb命令大全详解)adb环境配置教程
  • 当贝安卓9.0_创维E900S_e910V10C_3798mv310处理器线刷烧录包可救砖带adb功能
  • SQL 执行异常排查 java.sql.SQLException:从 SQLException 说起
  • uniapp 运行/发版微信小程序
  • vue2动态实现多Y轴echarts图表,及节点点击事件
  • MySQL 数据导出及备份方法
  • 公司网站建设设计如何收费网站诊断分析
  • 网站设计技巧如何看网站是用什么程序做的
  • Pythoner 的Flask项目实践-Mapboxgl-v3全球3D地图体验之地标性 3D 建筑物(迪拜哈里发大厦三维模型展示)
  • 学习机器学习要学习和掌握哪些知识?
  • 化学专业大型语言模型——SparkChemistry-X1-13B本地部署教程:洞察分子特性,精准预测化学行为
  • qt5下载
  • c 网站开发代码wordpress调用副标题
  • vscode 不能跳转 ERR_OSSL_EVP_BAD_DECRYPT
  • 大数据毕业设计选题推荐-基于大数据的全球产品库存数据分析与可视化系统-大数据-Spark-Hadoop-Bigdata
  • GitPuk入门到实战(4) - 如何进行分支管理
  • 基于AC6351D2做无线键盘
  • 【STM32项目开源】基于STM32的智能路灯控制系统
  • 超越编辑器:IntelliJ IDEA,如何成为Java开发的智慧引擎
  • Day31_【 NLP _1.文本预处理 _(2)文本张量表示方法】