MySQL 中 InnoDB 和 MyISAM 区别
MySQL 中 InnoDB 和 MyISAM 区别
1、事务和外键
InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版本并发的事务安全,包括ACID。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能
MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择
2、全文索引
Innodb不支持全文索引,如果一定要用的话,最好使用sphinx等搜索引擎。myisam对中文支持的不是很好
不过新版本的Innodb已经支持了
3、锁
mysql支持三种锁定级别,行级、页级、表级;
MyISAM支持表级锁定,提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs)
InnoDB支持行级锁,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,注意间隙锁的影响
例如update table set num=1 where name like “%aaa%”
4、存储
MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型, .frm文件存储表定义,数据文件的扩展名为.MYD, 索引文件的扩展名是.MYI
InnoDB,基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小
注意:MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦
5、索引
InnoDB(索引组织表)使用的聚簇索引、索引就是数据,顺序存储,因此能缓存索引,也能缓存数据
MyISAM(堆组织表)使用的是非聚簇索引、索引和文件分开,随机存储,只能缓存索引
6、并发
MyISAM读写互相阻塞:不仅会在写入的时候阻塞读取,MyISAM还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读
InnoDB 读写阻塞与事务隔离级别相关
以上就是MySQL 中 InnoDB 和 MyISAM 区别的详细内容,更多请关注其它相关文章!
上一篇: larval 如何捕获mysql错误
下一篇: php 验证email的准确性实例代码
推荐阅读
-
电子商务系统中 order表中的 order_id 和order_sn的区别
-
Oracle中的Char与Varchar的区别和实例
-
Linux中配置MySQL随系统的启动和关闭同步
-
如何查询中where和having的区别
-
MySQL null与not null和null与空值''''的区别详解
-
SQL SERVER中强制类型转换cast和convert的区别详解
-
PHP中SERIALIZE和JSON序列化与反序列化的区别
-
Oracle 和 mysql的9点区别
-
15_clickhouse,MySQL引擎;MySQL和ClickHouse中数据类型的对应关系
-
php中require和require_once的区别说明_PHP教程