MyISAM
5.5之前的默认存储引擎
系统表,临时表(在排序分组等操作中,数量超过一定大小,由查询优化器建立的临时表)
MyISAM存储引擎由MYD数据信息和MYI索引信息组成
它的锁级别是表级锁,对表进行数据读取时使用共享锁进行(共享锁与共享锁之间不会发生阻塞,因为只进行读并未修改)
当表损坏时可以进行修复,并不支持事务!!!
create table myIsam(id int, c1 varchar(10))engine=myisam;//这是创建一个MyISAM存储引擎的表
check table myIsam;//检查表是否正常
repair table MyIsam; //这是对表名为MyIsam表进行修复
当然,也可以使用myisamchk工具进行修复,但是要停止mysql服务才能操作此工具
支持索引:全文索引
支持数据压缩,使用myisampack命令
myisampack -b -f(强制) muIsam.MYI//会自动备份生成myIsam.OLD
在mysql5.0之前表最大为4G,要想存储大表要修改参数MAX_Rows和AVG_ROW_LENGTH,但在5.0之后取消的对表的限制,默认为256TB。
使用场景:非事务性应用。报表应用,只读类应用,空间类应用,GPS数据存放
Innodb
使用表空间进行数据存储,适合处理小事务,很少进行回滚
innodb_file_per_table参数 如果是on,则每一个表都有一个tablename.ibd
系统表空间和独立表空间的选择
1.系统表空间无法简单的收缩文件大小,
2.独立表空间可以用 optimize table 命令收缩系统文件,对表进行重建,无需重启sql服务器
系统表空间,会产生顺序读写,影响IO效率
独立表空间可以对多个文件刷新数据
建议:innodb使用独立表空间
表转移的步骤(系统表转移到独立表)
1.使用mysqldump导出所以数据库数据
2.停止mysql服务,修改参数,删除相关文件,
3.重启MYSQL,重建表并导入
系统表中存放innodb数据字典信息(通过B树管理),Undo回滚段
innodb是事务性存储引擎
支持事务acid特性 原子性 一致性 持久性 隔离性
Redo Log 重做日志,存储已提交事务,顺序读写
Undo Log 回滚日志 ,存储未提交事务,随机读写
它支持行级锁(存储引擎层实现)最大程度支持并发
lock table tablename write;//锁上
锁实现了事务的隔离性
锁分为 共享锁(read) 和 独占锁(write)
锁的粒度,表示锁定的单位(表,行,等)
表级锁,并发低。
阻塞和死锁并不一样!!
innodb状态检查
show engine innodb status
innodb支持全文索引,空间函数
myisam innodb 都是以2进制存储
CSV
CSV存储引擎的存储是以文本形式存储的(打开文件能看得懂,,字符文件)
.csv存储表内容(数据) csm存储元数据 表状态数据量 .frm表结构
它的特点:以csv格式对数据进行存储,列不能为NULL,不支持索引(优化查询)
create table mycsv(id int not null,c1 varchar(10) not null,c2 char(10) not null) engine=csv;//这是创建一个csv引擎的表
适用场景:数据交换的中间表,电子表格(变成csv文件 放在mysql目录下)
Archive
缓存写,用zlib对表数据进行压缩
数据存在.ARZ文件中
只支持insert和select操作,支持缓冲区
只支持在自增ID上增加索引(auto_increment)
create table myarchive(id int auto_increment not null,key(id)) engine=archive;//创建archive索引表
适用场景 日志和数据采集类应用
Memory
存储在内存中,
功能特点:支持hash索引(不能范围查找,等值查找使用hash) 支持btree索引(范围查找使用)
所有字段固定长度,不支持BLOG和TEXT等大字段
使用的是表级锁,表的大小由max_heap_table_size参数决定。
适用场景
查找或者映射表,例如邮编和地区的对应表
Federated
提供了访问远程MySQL服务器上表的方法 但本地要保存表结构和远程服务器的连接信息
性能不太好
show engines;
要想支持 要在mysql配置文件中修改