数据库学习----MySQL 存储引擎
MySQL 存储引擎
MySQL 常用的存储引擎
引擎名称 | 事务 | 说明 |
---|---|---|
MYISAM | N | |
CSV | N | 以 |
Archive | N | 只允许查询和新增数据而不允许修改的非实物型存储引擎 |
Memory | N | 是一种存储在内存中的非事务型的存储引擎 |
INNODB | Y | 最常用的事务型存储引擎 |
NDB | Y |
存储引擎特点
MyISAM
- 非事务性存储引擎
- 不能用在事务处理的场景
- 以堆表方式存储
- 没有特定顺序
- 所有叶子节点指向内存地址,避免二分查找,查询性能高
- 使用表级锁
- 查询时会对表加共享锁,修改时加排他锁,读写操作会互斥
- 不适合高并发的场景
- 支持
Btree 索引,空间索引,全文索引
MyISAM 出现问题时,比如索引文件损坏,我们可以使用以下操作对表进行修复
check table myisam表名
检查表的状态
repair table myisam表名
修复表
myisampack -b -f myisam表名
压缩表 [-b] 生成OLD 文件备份[-f] 强制压缩
使用场景
- 读操作远远大于写操作的场景
( 查询性能很好) - 不需要使用事务的场景
CSV
- 非事务型存储引擎
- 数据以
CSV 格式存储- 每列数据以逗号分割
- 可以直接编辑和查看文件数据
- 编辑文件后在
MYSQL 中是可以直接查看的
- 所有列不能为
NULL - 创建表的每个列都需要指定
not null
- 创建表的每个列都需要指定
- 不支持索引
- 不能频繁的查询和更新
使用场景
- 做为数据交换的中间表使用
Archive 引擎
- 非事务型存储引擎
- 表数据使用
zlib 压缩 - 只支持
insert 和select 操作 - 只允许在自增
ID 上建立索引
使用场景
- 日志和数据采集类应用
- 数据归档存储
Memory
- 非事务存储引擎
- 数据保存在内存中
- 所有数据要是可以重新生成的
- 所有字段长度固定
- 字段不能用
text ,blob 那种大的数据类型
- 字段不能用
- 支持
Btree 和Hash 索引
使用场景
- 用于缓存字典映射表
- 缓存周期性分析数据
Innodb 引擎
- 事务型存储引擎支持
ACID - 数据按主键聚集存储
- 支持行级锁及
MVCC - 加强数据并发能力
MVCC 避免数据阻塞
- 支持
Btree 和自适应Hash 索引 5.6 支持全文索引 ,5.7 支持空间索引
使用场景
- 大多数
OLTP 场景
NDB
需要安装特定版本的
- 事务型存储引擎
- 数据存储在内存中
- 与
Memory 不同的是,他会把数据存在磁盘中 - 显示的时候会把数据存储在内存中,对服务器内存大小有很大的要求
- 与
- 支持行级锁
- 支持高可用集群
- 支持
Ttree 索引- 跨设备存储
使用场景
- 需要数据完全同步的高可用场景
InnoDB
Innodb 不支持在线修改表结构的场景
操作 | 语法 |
---|---|
加全文索引 | CREATE FULL TEXT 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 |
在线DDL 存在的问题
- 有部分语句不支持在线
DDL - 长时间的
DDL 操作会引起严重的主从延迟 - 无法对
DDL 操作进行资源限制
如何更安全的执行DDL
工具 pt-online-schema-change [OPTIONS] DSN
- 建立一个要被修改的表的一个新表,这个新表的结构是原表修改后的结构
- 对新表的数据分批次拷贝到新表中
- 数据导入之后,对原表和新表进行重命名就完成了
重命名时会对表进行暂时的锁定
使用pt-online-schema-change 工具
所有操作需要在
修改操作示例add column modified_time timestamp
pt-online-schema-change --alter “add column modified_time timestamp” --execute D=stock,t=stock,u=dba,p=123456
D : 执行的数据库t:执行的表
u:执行的用户
p:用户的密码
事务
特征 | 说明 |
---|---|
原子性(A) | 一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束中间某个环节 |
一致性(C) | 在事务开始之前和事务结束以后,数据库的完整性没有被破坏 |
隔离性(I) | 事务的隔离性要求每个读写事务的对象与其他事务的操作对象能互相分离,即该事务提交钱对其他事务都不可见。 |
持久性(D) | 事务一旦提交了,其结果就是永久性的,就算发生宕机等事故,数据库也能将数据恢复。 |
实现方式
特征 | |
---|---|
原子性(A) | 回滚日志(Undo Log) |
一致性(C) | 重作日志(Redo Log |
隔离性(I) | 锁:用于隔离资源,分为共享锁和排他锁 |
持久性(D) | Redo Log & Undo Log |
MVCC
MVCC(多版本并发控制)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!