Mysql 使用 插件式存储引擎
Mysql 体系结构
mysql服务层
存储引擎层
都属于存储引擎
MyISAM 存储引擎
frm 是记录结构的, MYD和 MYI 是MyISAM 特有的
例
表级锁,对数据进行修改时需要全表加锁。读取时也是需要家共享锁。对读写操作并发性不是很好,但是只读的话不怎么影响,共享锁不阻塞共享锁
支持全文索引。
支持text,blob,前500个字符的前缀索引。
如果是只读表的话,就是没有修改操作的表, 可以压缩操作。压缩后的表不能进行插入。
什么时候MyISAM
Innodb 存储引擎
支持小事务
frm 是记录表结构的 idb 是存储数据的 。 如果是OFF ibdata1
frm 文件 。 数据字典 表,列,索引的相关信息
ACID特性 原子性,一致性,隔离性,持久性
实现以上特性。 从做日志 Redo log主要实现持久性, 回滚日志 Undo log
锁的粒度 : 表级锁, 行级锁。
行级锁 :写操作时,锁定资源更少,支持并发更多。
阻塞:一个在等另一个资源的释放,就是阻塞。阻塞是为了并发并正常运行。大量阻塞就会出现问题,性能整体下降。
死锁:两个或两个以上的相互占用了互相等待的资源,产生异常。数据库会自动发现死锁。
CSV 存储引擎
以文件方式存储的,可以查看文件命令直接查看。
CSV适用场景
Archive 存储引擎
Memory 存储引擎
IO效率高,数据存在内存中,重启mysql 数据会消失,但是结构会保留。
合适的索引类型对性能影响很重要。
Federated 引擎
如何选择正确的存储引擎
是否需要事务支持 : Innodb 是目前来说最稳定并且经过验证的存储引擎
如果不需要事务,并且主要是INSERT 和 SELECT 操作 也可以使用MyISAM
如果只有insert ,select 少的话可以选用Archive(例如日志)
备份的考虑:生产环境中,可以在线热备的存储引擎,只有Innodb 有免费的热备方案。
mysqldump备份属于逻辑备份,保证数据的一致性所以需要加锁。
崩溃恢复 : myisam 损坏率更高,恢复速度慢
考虑存储特有特性。
除非万不得已,不要使用多种存储引擎。
例如 Innodb 和 Myisam 的混合使用,事务回滚的时候 Innodb回滚,myisam并没有回滚,数据上会有问题。
如果进行热备,Innodb有热备,myisam没有。也会出问题。