当前位置:Gxlcms > mysql > MysqlInnoDB和MyISAM的区别_MySQL

MysqlInnoDB和MyISAM的区别_MySQL

时间:2021-07-01 10:21:17 帮助过:15人阅读

bitsCN.com InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。 基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而 InnoDB提供事务支持已经外部键等高级数据库功能。 以下是一些细节和具体实现的差别: 1.InnoDB不支持FULLTEXT类型的索引。2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。 5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。另外,InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%” 在实际应用中,MyISAM不一定比InnoDB快,原因如下: MyISAM采用的是表级锁和读乐观锁,也即是在有读操作时,所有对同个表的操作将被阻塞等待读操作完成,反则亦然,多个写操作之间也会胡星排斥。然而多个读操作读取同个表时不会互相排斥,所以在这种读多写少的场景下MyISAM比使用多版本控制的行级所的InnoDB表现的性能要好。 InnoDB采用的是多版本行级锁,所谓多版本行级锁,简单的来讲就是InnoDB会为没行记录增加一个类似于版本库的队列,读操作获取到的是当前操作的版本的上一个版本,保证读取到的内容是上一次操作保存好的数据,在写操作的时候会锁定当前版本的数据行,完毕后该数据行的版本加1。这样,在写和更新某一行记录的时候才加锁,读的是上一版本的数据,从而给读写都频繁的场景下提供了更高的并发性。 作者 夕阳红树林 bitsCN.com

人气教程排行