MyISAM引擎
特点 1.不支持事务 2.表级锁定:更新时锁整个表 3.读写互相阻塞:不仅会在写入的时候阻塞读取,还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读 4.只会缓存索引:通过key_buffer_size 缓存索引,大大提高访问性能较少磁盘IO,但缓存区只会缓存索引,而不会缓存数据 5.读取速度较快,占用资源相对少 6.不支持外键约束,但支持全文索引 7.MySQL5.5.5前缺省的存储引擎
InnoDB引擎
特点 1.支持事务:支持4个事务隔离级别,支持多版本读 2.行级锁定:通过索引实现,全表扫描仍然会是表锁 3.读写阻塞与事务隔离级别相关 4.具有非常高效的缓存特性:能缓存索引,也能缓存数据 5.整个表和主键以cluster方式存储,组成一棵平衡树 6.所有Secondary Index都会保存主键信息 7.支持分区,表空间 8.支持外键约束 9.和MyISAM比:InnoDB对硬件资源要求比较高
生产环境中如何批量更改MySQL引擎
法1:MySQL命令语句修改
ALTER TABLE 表名 ENGINE= INNODB;
ALTER TABLE 表名 ENGINE= MyISAM;
法2:使用sed命令对备份内容进行引擎转换
mysqldump > bak1.sql
nohup sed -e 's/MyISAM/InnoDB/g' bak2.sql > bak2.sql &
mysql < bak1.sql
法3:mysql_convert_table_format命令修改
mysql_convert_table_format --u=用户名 --p=密码 -e --engine=改成的存储引擎 库名 表名