Code前端首页关于Code前端联系我们

MySQL数据库MyISAM和InnoDB存储引擎的非深入对比

terry 2年前 (2023-09-26) 阅读数 129 #数据库

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前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门