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

【MySQL】进阶01-存储引擎

目录

    • 一,MySQL体系结构
    • 二,存储引擎简洁与操作命令
      • 语法格式:
      • 实战示例:
    • 三,InnoDB 与 MyISAM 的特点对比

一,MySQL体系结构

在开始之前,我们必须要了解MySQL的体系结构,知道它大概是怎么运作的。

MySQL 的架构设计非常优秀,它采用了插件式的存储引擎架构,将“查询处理”与“数据存储/提取”完全解耦。通常,MySQL 体系结构自上而下可以分为四层(连接层、服务层、引擎层、存储层)。

层级名称核心职责(它是干嘛的)包含的核心组件 / 技术举个通俗的例子
1. 连接层

(Connection)
安全看门人

负责客户端的连接、权限验证、线程分配。
连接池 (Connection Pool)、用户鉴权系统、SSL 安全连接。就像去银行办事,门口的保安核验你的身份证,并给你取一个排队号。
2. 服务层

(Service)
核心大脑

负责 SQL 语句的解析、优化、执行以及所有跨引擎的功能。
SQL 接口、解析器 (Parser)、优化器 (Optimizer)银行的业务经理。他负责看懂你的申请表(解析),想出最快办完的方案(优化),然后指挥柜员。
3. 引擎层

(Engine)
干活的工人(可插拔)。

负责具体数据的存储和提取,决定了表的特性。
InnoDB 引擎、MyISAM 引擎、Memory 引擎等。柜台里的具体办事员。有的办事员擅长办大额贷款(InnoDB,稳重安全),有的擅长快速数钞票(MyISAM,速度快)。
4. 存储层

(Storage)
保险库

负责把数据真正持久化到磁盘上。
操作系统文件系统、裸设备、.ibd文件、日志文件。银行后面的物理大金库,钱(数据)最终锁在里面的铁皮柜里。

在这一部分,面试和实战中最喜欢考的就是“服务层”与“引擎层”的分工。

只要记住一句话:“服务层负责想,引擎层负责做。”

  • 比如你写一句:SELECT * FROM user WHERE id = 1;
  • 服务层的优化器会思考:我要不要用id这个索引?用它需要花多少成本?
  • 想好之后,服务层对引擎层下达命令:“去把id = 1的这行数据给我拿过来。”
  • 引擎层(比如 InnoDB)就会去磁盘或内存里把这行数据找出来,恭恭敬敬地递给服务层。

二,存储引擎简洁与操作命令

MySQL 的灵魂就在于它的插件式存储引擎。这意味着,MySQL 规定了一套统一的接口(标准),任何人都可以根据这套接口开发自己的存储引擎。

在开发或排查问题时,你首先需要知道你的 MySQL 到底支持哪些引擎。

SHOWENGINES;

执行这个命令后,MySQL 会返回一张表,包含以下关键列:

  • Engine:引擎的名字(如 InnoDB, MyISAM, MEMORY)。

  • Support:MySQL 对该引擎的支持状态:

  • DEFAULT当前默认使用的引擎(现代版本基本都是 InnoDB)。

  • YES:支持并已启用。

  • NO:不支持或未启用。

  • Transactions极重要!表示该引擎是否支持事务(可以看到只有 InnoDB 是YES)。

  • XA:是否支持分布式事务。

  • Savepoints:是否支持事务回滚点(方便局部回滚)。

存储引擎是基于表的。也就是说,在同一个数据库里,你可以让张三表用 InnoDB,李四表用 MyISAM。

CREATETABLE表名(字段名1数据类型[约束],字段名2数据类型[约束])ENGINE=引擎名称;
-- 创建一个用于核心业务、需要事务支持的订单表(指定为 InnoDB)CREATETABLEt_order(order_idINTPRIMARYKEYAUTO_INCREMENT,user_idINTNOTNULL,moneyDECIMAL(10,2))ENGINE=InnoDB;-- 创建一个仅用于记录日志、不需要事务的日志表(指定为 MyISAM)CREATETABLEt_log(log_idINTPRIMARYKEYAUTO_INCREMENT,contentVARCHAR(500),create_timeDATETIME)ENGINE=MyISAM;

注意:如果你在建表时不写ENGINE = ...,MySQL 会自动使用默认引擎(即上面SHOW ENGINES;查出来的DEFAULT引擎),MySQL里就是InnoDB。

如果线上的表以前用的是 MyISAM,现在想改成 InnoDB,不需要删表重打,一条命令搞定。

语法格式:

ALTERTABLE表名ENGINE=新引擎名称;

实战示例:

-- 将日志表的引擎从 MyISAM 修改为 InnoDBALTERTABLEt_logENGINE=InnoDB;

底层原理(避坑指南):> 当你执行这条命令时,MySQL 会在后台做三件事:

  1. 创建一张新表(使用你指定的新引擎)。
  2. 把旧表的数据全部复制到新表中。
  3. 复制完成后,删除旧表,重命名新表。
    代价:如果这张表的数据量非常大(比如几千万条),这个操作会消耗大量的 IO 性能并锁表,绝对不能在白天业务高峰期执行!

三,InnoDB 与 MyISAM 的特点对比

对比维度InnoDB 存储引擎MyISAM 存储引擎为什么重要(大白话解释)
事务安全支持 (ACID)不支持InnoDB 断电能自动恢复数据;MyISAM 断电数据可能损坏或丢失。
锁的粒度行级锁(Row Lock)表级锁(Table Lock)InnoDB 几百人同时改不同行互不影响;MyISAM 一人改数据,整张表锁死,别人只能排队。
外键约束支持不支持InnoDB 能在数据库层面保证表与表之间的数据联动和一致性。
磁盘文件1个核心文件

.ibd(数据与索引合一)
2个核心文件

.MYD(存数据)

.MYI(存索引)
InnoDB 索引和数据在一起,查到索引就能直接拿到数据,效率极高。
崩溃恢复支持(通过 redo log)不支持InnoDB 具备金融级的安全保障 (Crash-Safe);MyISAM 崩溃后需要人工修复表。
底层索引聚簇索引非聚簇索引决定了数据在磁盘上的物理排列方式。

所以一般默认就是InnoDB,不用改。

http://www.jsqmd.com/news/881230/

相关文章:

  • 如何快速部署PostgreSQL数据建模工具:跨平台完整安装教程
  • Akagi麻将AI助手:5分钟搭建你的实时对局分析系统,告别盲目打牌!
  • FanControl终极指南:5分钟搞定Windows风扇控制,免费实现精准散热
  • Polyformer配件制作:Polycutter Lite切割器组装与使用教程
  • 如何快速建立高效能源工厂:戴森球计划蓝图仓库完整指南
  • 如何高效配置Wan2.2-I2V-A14B图像转视频模型:从环境搭建到生产部署的完整指南
  • 告别SystemTap:为什么Linux内核开发者更偏爱ftrace?从原理到实战对比
  • 昇腾NPU实战:vllm-ascend深度解锁大模型推理新境界
  • AI Agent Harness Engineering 生态系统:基础设施、工具与应用层
  • 如何快速掌握Apache Camel:企业集成模式实战指南
  • 《当下的力量》4-6章深度解读:从理论到实践,掌握临在的核心技术
  • 如何快速上手SciHubEVA:5分钟学会使用这款强大的学术论文下载工具
  • 幻兽帕鲁 - 服务器模组安装完全指南
  • 探索DeepPurpose预训练模型:10分钟实现SARS-CoV-3CL蛋白酶抑制剂虚拟筛选
  • WeTextProcessing解决方案:构建企业级多语言文本归一化与逆归一化系统
  • Windows系统优化终极指南:5个简单高效的Winhance使用技巧
  • AI by Hand Excel:在电子表格中实现损失函数与精度评估的完整指南
  • ComfyUI-Custom-Scripts自动完成功能完整指南:提升AI绘画效率的终极解决方案
  • Typora破解——已失效
  • 3步快速上手:终极AI图像增强工具Real-ESRGAN完全指南
  • 为什么选择Forge?5大优势让自托管LLM工具调用更简单高效
  • 如何用py-motmetrics在5分钟内实现多目标跟踪算法量化评估
  • CStealer工作原理揭秘:从Discord令牌到加密货币钱包的窃取技术
  • 3个关键维度重新定义工作价值:科学量化你的职业选择
  • 生存分析避坑指南:从Cox回归结果到发表级森林图,你的数据整理对了吗?
  • 洛雪音乐音源终极指南:免费解锁全网无损音乐的完整方案
  • Win11Debloat:如何用5步彻底优化Windows 11系统性能与隐私
  • GetSubtitles终极指南:5分钟掌握智能字幕下载,高效解决观影难题
  • Token CSS高级技巧:如何扩展自定义设计令牌和主题的终极指南
  • StableSR vs 传统放大算法:为什么AI超分辨率效果更好?