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

存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)

一、MySQL四层体系结构

在这里插入图片描述

从上层到下层,各层职责明确且相互协作,共同支撑MySQL运行。

  1. 连接层:负责客户端接入,处理连接、权限认证(如验证账号密码),并通过线程池为合法连接分配线程,还可实现SSL安全链接。
  2. 服务层:核心功能层,提供SQL接口、查询缓存(若开启),完成SQL解析、优化(如确定查询顺序、是否用索引),同时实现存储过程、函数等跨引擎功能。
  3. 引擎层:插件式架构,负责数据的存储与提取,不同引擎功能差异大(如事务、锁机制),索引也在此层实现,用户可按需选择。
  4. 存储层:将数据(含redolog、undolog、索引、日志文件等)存储在文件系统,与引擎层交互完成数据读写。

二、存储引擎核心知识

存储引擎是“表级”技术实现,决定数据存储、索引建立等方式,需重点掌握其指定方式、特点及区别。

1. 基础操作
  • 建表指定引擎:通过CREATE TABLE 表名(...) ENGINE = 引擎名;指定,未指定则用默认引擎(MySQL 5.5后默认InnoDB)。
  • 查询支持的引擎:执行show engines;查看当前数据库支持的所有存储引擎及状态。
2. 三大核心引擎特点
引擎核心特点文件组成适用场景
InnoDB支持事务(ACID)、行级锁、外键;高可靠高性能xxx.ibd(存表结构、数据、索引)对事务一致性要求高,有更新/删除操作(如订单系统)
MyISAM不支持事务/外键,仅表锁;访问速度快xxx.sdi(表结构)、xxx.MYD(数据)、xxx.MYI(索引)读/插入为主,低并发(如日志、评论存储)
Memory数据存内存,默认hash索引;速度极快xxx.sdi(仅表结构)临时表、缓存(如购物车、临时查询结果)
3. InnoDB关键补充
  • 表空间配置:通过innodb_file_per_table参数控制,开启后每张表对应独立ibd文件,可通过ibd2sdi指令提取表结构。
  • 逻辑存储结构:从大到小为「表空间→段(数据段、索引段等)→区(1M,含64个页)→页(16KB,磁盘管理最小单元)→行」。

三、存储引擎选择原则

根据业务需求匹配引擎特性,复杂场景可组合使用:

  1. 选InnoDB:需事务完整性、高并发,有频繁更新/删除(如电商订单、金融数据)。
  2. 选MyISAM:读/插入为主,低并发,无需事务(如静态数据、日志存储,现多被MongoDB替代)。
  3. 选Memory:需临时存储、高速访问,可接受数据丢失(如临时缓存、会话数据,现多被Redis替代)。

四、高频面试考点

InnoDB与MyISAM的核心区别

  1. 事务支持:InnoDB支持,MyISAM不支持。
  2. 锁机制:InnoDB支持行锁+表锁,MyISAM仅支持表锁。
  3. 外键:InnoDB支持外键约束,MyISAM不支持。

五.MySQL 核心存储引擎对比表

对比维度InnoDBMyISAMMemory
事务支持支持(遵循ACID模型)不支持不支持
锁机制行级锁(默认)+ 表级锁仅支持表级锁仅支持表级锁
外键约束支持不支持不支持
索引类型支持B+tree索引;5.6+支持全文索引支持B+tree索引;支持全文索引默认hash索引;支持B+tree索引
存储位置磁盘(ibd文件)磁盘(sdi+MYD+MYI文件)内存(重启/断电后数据丢失)
文件组成xxx.ibd(表结构、数据、索引)xxx.sdi(表结构)、xxx.MYD(数据)、xxx.MYI(索引)xxx.sdi(仅表结构)
存储限制最大64TB有(受操作系统文件大小限制)有(受内存大小限制)
空间占用较高(数据+索引+事务相关文件)较低(数据与索引分离存储)N/A(数据存内存,无磁盘占用)
内存使用较高(需缓存数据、索引、日志)较低(仅缓存索引)中等(数据全存内存)
批量插入速度较低(需维护事务、索引)较高(无事务开销)极高(内存操作)
数据安全性高(支持redolog、undolog恢复)较低(无事务保护,崩溃易损坏)极低(内存存储,断电即失)
典型适用场景电商订单、金融数据(需事务/高并发)日志存储、静态数据(读多写少)临时缓存、会话数据(高速临时存储)

要不要我基于这份表格,再帮你生成一份存储引擎选择决策流程图?流程图会按业务需求(如是否需事务、是否高频读写等)分步引导,帮你快速确定适合的存储引擎。

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

相关文章:

  • 星外网站开发苏州网络推广
  • 怎么做网站横幅建设工程协会网站查询系统
  • 1NumPy 常用代码示例
  • 【工业场景】用YOLOv8实现行人识别
  • 新手玩Go协程的一些小坑
  • STM32的VDD和VSS,VDDA和VSSA,REF+与REF-。
  • 基于STM32的智能门禁系统(论文+源码)
  • 新乡网站建设价格怎么做网站模块
  • 中小企业建设网站补贴企业网站推广的重要性
  • 信息比率诊断工具开发量化评估ETF网格择时能力有效性
  • 栏位索引超过许可范围:4,栏位数:3。; nested exception is org.postgresql.util.PSQLException
  • 厦门网站建设哪家强徐州58同城网
  • 如何进行新产品的推广网站seo技术
  • Dioxus状态管理
  • 微调高级推理大模型(COT)的综合指南:从理论到实践
  • 做美食分享网站源码wordpress网址一大串
  • 深圳做网站的人百度竞价点击软件奔奔
  • uniapp学习【整体实践】
  • Rabbitmq如何避免消息丢失
  • 建设一个朋友的网站工商局注册公司网站
  • wap网站建设免费关于网站建设费用的报告
  • asp网站开发实训报告亚马逊开店需要什么条件
  • cms管理手机网站制作网站的页面设计怎么做
  • 湖北工程公司建设公司网站腾讯云服务器免费体验
  • 面试问题—你接受加班吗?
  • 使用Asp.Net WebApi(.net 8)托管Unity WebGL
  • 用凡科做网站需要花钱吗localhostwordpress打不开
  • 15 【C++11 新特性】统一的列表初始化和变量类型推导
  • 合肥制作网站单位有哪些免费网站
  • 【密码学实战】openHiTLS client命令行:国密TLCP/DTLCP客户端工具