🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
在MySQL数据库中,有四种存储引擎:MEMORY存储引擎、MERGE存储引擎、MyIASM存储引擎、Innodb存储引擎。常用的引擎主要就是2个:Innodb和MyIASM。这里就只讨论Innodb和MyIASM的区别。 **1、 构造上的区别** MyISAM在磁盘上存储成三个文件,其中.frm文件存储表定义;.MYD (MYData)为数据文件;.MYI (MYIndex)为索引文件。 innodb是由.frm文件、表空间(分为独立表空间或者共享表空间)和日志文件(redo log)组成。 **2、事务上的区别** myisam不支持事务;而innodb支持事务 **3、锁上的区别** myisam使用的是表锁;而innodb使用的行锁(当然innodb也支持表锁)。 表级锁:直接锁定整张表,在锁定期间,其他进程无法对该表进行写操作,如果设置的是写锁,那么其他进程读也不允许,因此myisam支持的并发量低,但myisam不会出现死锁; 行级锁:只对指定的行进行锁定,其他进程还是可以对表中的其他行进行操作的。因此行锁能大大的减少数据库操作的冲突,但有时会导致死锁。 **4、是否支持外键的区别** myisam不支持外键,innodb支持外键 **5、表的具体行数的区别** MyISAM:保存有表的总行数,如果select count(*) from table;会直接取出出该值。 InnoDB:没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。 **6、 存储空间上的区别** MyISAM:可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。 InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。