1、MyISAM不支持事务,InnoDB是事务类型的存储引擎
2、MyISAM只支持表级锁,而InnoDB支持行级锁和表级锁默认为行级锁
MyIsam -> 表锁
对于write,如果表上没有锁,则在上面绑定一个写锁,否则丢到写锁队列中。
对于read,如果表上没有锁,则在上面绑定一个读锁,否则丢到读锁队列中。
当一个锁被释放的时候,表会先被写锁队列的线程获得,然后才是读锁队列,这意味着如果有很多更新的情况下,得等所有写锁线程执行完才能返回select的内容。
InnoDB -> 行锁
优点:①行级锁是Mysql中锁力度最小的,在数据量大的情况下能减少冲突的情况。
②回滚的时候只需要少量的更改
③可以长时间锁定单一行
缺点:①行级锁需要占用更多内存
②相比表锁和页锁需要绑定更多的锁
③执行效率上会比表锁和行级锁慢
④行级锁会导致死锁
原因分析:
行级锁锁定的是索引。索引分为主键索引和非主键索引。当操作的是主键索引,则会直接锁定主键索引。当操作的是非主键索引,则会先去锁定非主键索引,然后再锁定主键索引。
举例:
表A:(Id,State,Time) 主键索引Id、非主键索引State
当一个SQL 执行 Update A set State = 1 Where State = 2;时,会锁定State的索引,然后请求锁定主键索引Id.
而同时另一个SQL 执行 Update A set State = 2 Where Id = 1;会锁定Id索引,由于修改的又是State = 2的数据,同时也会请求锁定State的索引。这样彼此相互等待着,就会导致死锁产生。
3、MyISAM不支持外键,InnoDB支持外键
4、MyISAM引擎的表在高并发的情况下容易造成损坏
恢复方式:可以使用Mysql自带的myisamchk工具: myisamchk -r tablename 或者 myisamchk -o tablename(比前面的更保险) 对表进行修复
损坏原因:服务器突然断电导致数据文件损坏、mysqld进程在写入的时候被kill了、磁盘故障...
5、MyISAM保存count(*)的值,InnoDB需要每次扫描全表统计
6、MyISAM支持全文索引(FULLTEXT),InnoDB不支持
7、MyISAM引擎的表的查询、更新、插入的效率要比InnoDB高
对于数据量不大,百万级别,写少的用MyISAM比较适合。
对于数据量大,读写多,用InnoDB适合,InnoDB适合管理。
相关推荐
MyISAM和InnoDB的异同 MyISAM和InnoDB的异同
MyISAM引擎与InnoDB引擎性能的对比
在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问。为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数据库引擎(5.5版之前),由...
自己总结的 关于mysql存储引擎myisam innodb 的比较 两者区别 对面试会很有帮助
MyISAM InnoDB 区别 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的...
数据库引擎 MyISAM 和 InnoDB 对比
MyISAM和InnoDB都使用B+树来实现索引: • MyISAM的索引与数据分开存储 • MyISAM的索引叶子存储指针,主键索引与普通索引无太大区别 • InnoDB的聚集索引和数据行统一存储 • InnoDB的聚集索引存储数据行本身,普通...
8.MySQL存储引擎--MyISAM与InnoDB区别1
mysql数据库 选择合适的数据库引擎和myisam和innodb的主要区别
MyISAM引擎与InnoDB引擎性能的对比,
InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度...
今天小编就为大家分享一篇关于MySQL存储引擎MyISAM与InnoDB区别总结整理,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
主要介绍了Mysql 的存储引擎,myisam和innodb的区别,需要的朋友可以参考下
InnoDB支持事务安全、Mysq唯一支持外键的存储... 但同时InnoDB提供了两种自动提交和手动提交两种选择(SET AUTOCOMMIT=0设置),根据文档所述,自动提交的性能很差,所有的修改操作和非自动提交都有200多倍的性能差距!
MySQL存储引擎MyISAM与InnoDB的区别 一、InnoDB支持事务,MyISAM不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。 二、MyISAM适合查询...
2)辅助索引(Secondary key)在 MyISAM 中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求 key 是唯