MyISAM 存储引擎
是mysql5.5之前的默认存储引擎。
文件: 由MYD和MYI 2种文件构成
特性:
- 并发性和锁级别
- 表损坏修复
- check table tablename 检查表
- repair table tablename 恢复表
1
2
3create table myisam ( id int, c1 varchar(20))engine=myisam charset=utf8;
check table myisam;
repair table myisam;支持全文索引
支持数据压缩 (myisampack),压缩后只能进行读操作
1
2
3
4
5# myisampack -b -f myIsam.MYI
#ls -lh myisam*
myIsam.MYI 压缩后新文件
myIsam.OLD 原文件限制
默认的版本< MYSQL5.0 的默认表大小4G
- 修改MAX_Rows 和AVG_ROW_LENGTH 后可以存储大表
- 大于MySQL5.0版本默认支持256TB,不用修正
- 支持场景
- 非事务型应用,一般不涉及财务的业务都可以支持.
- 只读类应用,因为支持压缩后无法写入,报表类比较适合
- 空间类应用.
InnoDB 存储引擎
- 在MYSQL5.5后版本变成默认存储引擎
- InnoDB使用表空间进行数据存储
- 配置参数 innodb_file_per_table 进行表存储空间配置
- ON: 独立表空间, 存储tablename.ibd
- OFF: 系统表空间,ibdataX
- 配置参数 innodb_file_per_table 进行表存储空间配置
1 | # 查看存储状态 |
==强烈建议用独立表空间进行存储===
把系统表空间转独立表空间步骤
- mysqldump导出所有数据库表数据
- 停止mysql服务,修改参数,并删除InnoDB相关文件
- 重启MySQL服务,重建Innodb系统表空间
- 重新导入数据
InnoDB 特性
- 是一种事务性的存储引擎
- 完成支持事务的ACID特性
- Redo log(实现事务持久性) 和Undo Log(未提交事务回滚和多版本控制)
- show variables like 'innodb_log_files_in_group'; - show variables like 'innodb_log_buffer_size';
- 区别于MyiSAm的表级锁,innodb属于行级所.可支持更大的并发
- 行级锁是由存储引擎层实现的.
额外知识
锁
- 锁主要是管理共享资源的并发访问
- 用于实现事务的隔离性
- 锁类型
- 共享锁(也称读锁)
- 独占锁(也称写锁)
- 锁的粒度
- 表级锁
1 | begin; |
- 实现表级锁
1 | lock table user write; |
阻塞和死锁
- 阻塞是为了事务可以并发和正常运行。
- 死锁可以由系统自动处理
innodb 状态监测
1 | show engine innodb status |
适用场景
一般建议都适用InnoDB,适用于大多数的OLTP应用。
MySQL5.7之后已经支持全文索引和空间函数!!
如何选择存储引擎
==建议InnoDB,不要混合使用存储引擎==
- 事务
- 备份
- 崩溃恢复
- 存储引擎的特有特性