MySQL-常用引擎
一:引擎类型
1. InnoDB存储引擎
是一个健壮的事务型存储引擎,该引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方案,InnoDB还引入了行级锁定和外键约束。
特点:
1.更新:适合多重并发的更新请求;
2.事务:支持标准事务;
3.恢复:能够自动从灾难中恢复;
4.外键:支持外键;
5.支持自动增加列AUTO_INCREMENT属性。
2. MyISAM存储引擎
其速度比InnoDB类型更快,不支持事务,不支持外键,崩溃后无法安全恢复。对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。
特点:
1.不支持事务,不具备(原子性、一致性、分离性、永久性)特性;
2.表锁定形式(更新时锁定整个表、虽然锁定的实现成本很小,但大大降低了并发性能);
3.读写相互阻塞(写入的时候阻塞读取、读取的时候阻塞写入、但是读取不会阻塞读取);
4.读取速度快、占用资源比较少;
5.不支持外键约束、只支持全文检索;
6.是MySQL5.5.5版本之前的默认存储引擎。
二:如何选择
大部分情况下,InnoDB都是正确的选择,可以简单地归纳为一句话”除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应优先选择InnoDB引擎”。
除非万不得已,否则不建议混合使用多种存储引擎,否则可能带来一系列复杂的问题,以及一些潜在的bug和边界问题,如果应用需要不同的存储引擎,请先考虑以下几个因素:
事务:如果应用需要事务支持,那么InnoDB(或者XtraDB)是目前最稳定并且经过验证的选择。
备份:如果可以定期地关闭服务器来执行备份,那么备份的因素可以忽略。反之,如果需要在线热备份,那么选择InnoDB就是基本的要求。
恢复:MyISAM崩溃后发生损坏的概率比InnoDB要高很多,而且恢复速度也要慢。
特有的特性:如果一个存储引擎拥有一些关键的特性,同时却又缺乏一些必要的特性,那么有时候不得不做折中的考虑,或者在架构设计上做一些取舍。
三:查看引擎
show engines;