InnoDB与MyISAM的区别

InnoDB与MyISAM的区别

区别 InnoDB MyISAM
事务是否支持 InnoDB 支持事务 MyISAM 不支持事务
外键是否支持 InnoDB 支持外键。对一个包含外键的 InnoDB 表转为 MYISAM 会失败; MyISAM 不支持外键
SELECT 操作 UPDATE,INSERT,Delete操作

1.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表

2.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。

3.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用

如果执行大量的SELECT,MyISAM是更好的选择
是否保存表的具体行数 InnoDB 不保存,执行 select count(*) from table 时需要全表扫描 MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
InnoDB 最小的锁粒度是行锁。另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如:update table set num=1 where name like “%aaa%” 表锁。MyISAM 最小的锁粒度是表锁。一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。

 

如何选择:

1. 是否要支持事务,如果要请选择 InnoDB,如果不需要可以考虑 MyISAM;

2. 如果表中绝大多数都只是读查询,可以考虑 MyISAM,如果既有读写也挺频繁,请使用InnoDB。

3. 系统奔溃后,MyISAM恢复起来更困难,能否接受,不能接受就选 InnoDB;

4. MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的。如果你不知道用什么存储引擎,那就用InnoDB,至少不会差。

posted @ 2022-05-02 15:36  编程小白1024  阅读(26)  评论(0编辑  收藏  举报