本文已参与「新人创作礼」活动,一起开启掘金创作之路。
知识点
-
了解 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常用的存储引擎
| 引擎名称 | 事务 | 说明 |
|---|---|---|
| MYISAM | N | MySQL5.6之前的默认引擎,最常用的非事务型存储引擎 CSV N 以CSV格式存储的非事务型存储引擎 |
| CSV | N | 以CSV格式存储的非事务型存储引擎 |
| Archive | N | 只允许查询和新增数据而不允许修改的非事务型存储引擎 |
| Memory | N | 是一种易失性非事务型存储引擎 |
| INNODB | Y | 最常用的事务型存储引擎 |
| NDB | Y | MySQL集群所使用的内存型事务存储引擎 |
MyISAM
特点
-
非事务型存储引擎
-
以堆表方式存储
-
使用表级锁
-
支持Btree索引,空间索引,全文索引
使用场景
-
读操作远远大于写操作的场景
-
不需要使用事务的场景
CSV引擎
特点
-
非事务型存储引擎
-
数据以 CSV 格式存储
-
所有列都不能为 NULL
-
不支持索引
CSV引擎的适用场景
- 作为数据交换的中间表使用
Archive引擎
特点
-
非事务型存储引擎
-
表数据使用zlib压缩
-
只支持Insert和Select
-
只允许在自增ID上建立索引
使用场景
-
日志和数据采集类应用
-
数据归档存储
Memory引擎
特点
-
非事务型存储引擎
-
数据保存在内存中
-
所有字段长度固定
-
支持 Btree 和 Hash 索引
使用场景
-
用于缓存字典映射表
-
缓存周期性分析数据
Innodb引擎
特点
-
事务型存储引擎支持ACID
-
数据按主键聚集存储
-
支持行级锁及MVCC
-
支持Btree和自适应Hash索引
-
支持全文和空间索引
使用场景
- 大多数OLTP场景
NDB引擎
特点
-
事务型存储引擎
-
数据存储在内存中
-
支持行级锁
-
支持高可用集群
-
支持Ttree索引
使用场景
- 需要数据完全同步的高可用场景