[MySQL 面试题]-内部技术架构 57-60 能否为一张表单独设置存储引擎?

113 阅读2分钟

image.png

image.png

57 能否为一张表单独设置存储引擎?

CREATE TABLE 表名 (
    列定义...
) ENGINE = 引擎名;

58 如何开发自己的 MySQL 存储引擎?

dev.mysql.com/doc/dev/mys…

基础前提

  1. 对MySQL源码非常熟悉(尤其是 Server 层)
  2. 掌握存储引擎插件接口(Storage Engine API)
  3. 具备强大的 C/C++ 工程能力
  4. 理解数据库核心机制:事务、MVCC、锁、索引、日志、缓存、恢复等
  5. 了解现有引擎设计(如 InnoDB、MyISAM)

🚀 二、开发步骤(从入门到架构)

阶段内容工具与资源
1阅读 MySQL 源码(Server 层 + handler 层)GitHub 源码、Percona、MariaDB 分支更活跃
2实现一个最小化引擎(参考 Example Engine官方源码提供的 example 模板
3实现基本能力:建表/增删改查handler.cc、handler.h、ha_xxx.cc
4支持事务(Redo、Undo、锁)需设计日志机制、内存表结构、锁管理
5支持索引(B+树 / LSM Tree)参考 InnoDB / MyRocks 索引模块
6支持并发与一致性(MVCC)支持不同隔离级别,构建版本控制
7支持崩溃恢复(WAL、Doublewrite)自研日志系统或复用已有模块
8调优:缓存、压缩、写放大、持久化性能根据业务场景优化
9集成测试、benchmark使用 sysbench、TPC-C、自研数据模拟器

59 InnoDB 和 MyISAM 的区别是什么?

I 聚簇索引:数据与主键索引存储在一起, M 非聚簇索引:数据与索引分开

  • InnoDB:适合事务型、高并发、更新频繁的业务系统(如订单系统、支付系统)
  • MyISAM:适合读多写少、对事务要求不高的场景(如日志分析、报表系统)
InnoDBMyISAM
事务支持支持事务(ACID)、支持回滚、提交、崩溃恢复不支持事务
锁机制行级锁(并发更优)表级锁(并发较差)
外键支持支持不支持
崩溃恢复支持崩溃恢复、具备 redo/undo日志不支持,需要手动恢复
MVCC支持支持(提高读写并发)不支持
存储结构聚簇索引:数据与主键索引存储在一起非聚簇索引:数据与索引分开
表空间支持独立表空间、共享表空间每个表一个.MYD数据文件+.MYI索引文件

60 具体说一下如何做技术选型

  • 除非几乎没有写操作全部都是高频的读操作 可以选择 MyISAM 作为表的存储引擎。
  • 其他业务可以一律使用 InnoDB。