MySQL数据库MyISAM和InnoDB存储引擎的非深入对比
MySQL有好几种存储引擎,MyISAM和InnoDB是其中应用最广泛的两个。下面是关于这两个引擎的一些基本概念(不深入介绍)。
MyISAM 是 MySQL 的标准存储引擎。它基于传统的ISAM类型,支持全文搜索,但它不是事务安全的,也不支持外键。每个MyISAM表都存储在三个文件中:frm文件存储表定义;数据文件为MYD(MYData);索引文件是MYI(MYIndex)。
InnoDB是一个事务引擎,支持回滚、崩溃恢复、多版本并发控制、ACID事务、行级锁(InnoDB表中的行锁不是绝对的。如果MySQL在执行SQL时不确定语句(在扫描的范围内),它会对InnoDB表也锁定整个表(例如类似操作期间的SQL语句),并按照Oracle类型提供无锁读取方法。 InnoDB 将其表和索引存储在表空间中,该表空间可以包含多个文件。
主要区别:
MyISAM 是非事务性的,而 InnoDB 是事务性的。
MyISAM 锁粒度是表级的,而 InnoDB 支持行级锁。
MyISAM 支持全文索引,但 InnoDB 不支持全文索引。
MyISAM比较简单,所以在效率上比InnoDB要好。小型应用程序可以考虑使用MyISAM。
MyISAM表以文件的形式存储。在跨平台数据传输时使用MyISAM存储会省去很多麻烦。
InnoDB 表比 MyISAM 表更安全。可以将非事务表切换为事务表(change table tablename type=innodb),而无需保证数据不丢失。
应用场景:
MyISAM 管理非事务表。它提供高速存储和检索以及全文搜索功能。如果您的应用程序需要执行大量的 SELECT 查询,MyISAM 是更好的选择。
InnoDB 用于事务处理应用程序,具有许多功能,包括 ACID 事务支持。如果你的应用程序需要执行大量的INSERT或UPDATE操作,你应该使用InnoDB,它可以提高并发多用户操作的性能。
常用命令:
(1)查看表的存储类型(三种):
show create table tablename
show table status from dbname where name=tablename
mysqlshow -u user -p password --status dbname tablename
(2) 更改表的存储引擎:
change table tablename type =InnoDB
(3) 在命令行中添加以下参数启动mysql数据库,以便新发布的表默认使用事务:
--default-table-type=InnoDB
(4 ) 暂时更改默认表类型:
set table_type=InnoDB
将变量显示为'table_type'
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。