了解 MySQL 存储引擎

210 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

知识点

  • 了解 MySQL 存储引擎及其适用场景

  • 了解在 Innodb 无法在线修改表结构情况

    加全文索引CREATE FULLTEXT INDEX name ON table(column);
    加空间索引ALTER TABLE geom ADD SPATIAL INDEX(g)
    删除主键ALTER TABLE tbl name DROP PRIMARY KEY
    增加自增列alter table t add column id int auto_increment not null primary key
    修改列类型ALTER TABLE tbl_name CHANGE c1 c1 NEW TYPE
    改表字符集ALTER TABLE tbl_name CHARACTER SET = charset name

常见问题

  • InnoDB 的事务实现?

    特征INNODB实现方式
    原子性(A)回滚日志 (Undo log):用于记录数据修改前的状态
    一致性(C)重作日志(Redo Log):用于记录数据修改后的状态
    隔离性(I)锁:用于资源隔离,分为共享锁和排它锁
  • Innodb 读操作是否会阻塞写操作?

    查询需要对资源加共享锁(S),参考下表:

    排它锁共享锁
    排它锁不兼容不兼容
    共享锁不兼容兼容

MysQL常用的存储引擎

引擎名称事务说明
MYISAMNMySQL5.6之前的默认引擎,最常用的非事务型存储引擎 CSV N 以CSV格式存储的非事务型存储引擎
CSVN以CSV格式存储的非事务型存储引擎
ArchiveN只允许查询和新增数据而不允许修改的非事务型存储引擎
MemoryN是一种易失性非事务型存储引擎
INNODBY最常用的事务型存储引擎
NDBYMySQL集群所使用的内存型事务存储引擎

MyISAM

特点

  • 非事务型存储引擎

  • 以堆表方式存储

  • 使用表级锁

  • 支持Btree索引,空间索引,全文索引

使用场景

  • 读操作远远大于写操作的场景

  • 不需要使用事务的场景

CSV引擎

特点

  • 非事务型存储引擎

  • 数据以 CSV 格式存储

  • 所有列都不能为 NULL

  • 不支持索引

CSV引擎的适用场景

  • 作为数据交换的中间表使用

Archive引擎

特点

  • 非事务型存储引擎

  • 表数据使用zlib压缩

  • 只支持Insert和Select

  • 只允许在自增ID上建立索引

使用场景

  • 日志和数据采集类应用

  • 数据归档存储

Memory引擎

特点

  • 非事务型存储引擎

  • 数据保存在内存中

  • 所有字段长度固定

  • 支持 Btree 和 Hash 索引

使用场景

  • 用于缓存字典映射表

  • 缓存周期性分析数据

Innodb引擎

特点

  • 事务型存储引擎支持ACID

  • 数据按主键聚集存储

  • 支持行级锁及MVCC

  • 支持Btree和自适应Hash索引

  • 支持全文和空间索引

使用场景

  • 大多数OLTP场景

NDB引擎

特点

  • 事务型存储引擎

  • 数据存储在内存中

  • 支持行级锁

  • 支持高可用集群

  • 支持Ttree索引

使用场景

  • 需要数据完全同步的高可用场景