您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Mysql InnoDB和MyISAM的区别_MySQL

2024/6/1 4:40:29发布17次查看
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
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product