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

常用的MySQL数据存储引擎MyISAM和InnoDB的区别

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

MySQL有多种存储引擎。目前,两个常用的引擎是MyISAM和InnoDB。除了这两台机器之外,还有很多其他的机器,包括官方的和一些公司的。自行开发。本文主要简单介绍一下常用的MySQL引擎。首先,这是面试中经常被问到的问题。其次,这也是数据库设计中不可忽视的问题。使用合适的机器可以更好地适应业务场景,提高业务效率。

MyISAM

MyISAM是MySQL 5.5.5之前的默认引擎,支持B-tree/FullText/R-tree索引类型。

锁级别是表锁。表锁的优点是开销低,加锁速度快;缺点是锁粒度大、锁脉冲概率高、并发能力低。该引擎非常适合基于查询的业务。

该引擎不支持事务,也不支持外键。

MyISAM强调速读的操作。它存储了表中的行号,因此当你SELECT COUNT(*) FROM TABLE时,只需要直接读取存储的值即可,无需进行全表扫描。

InnoDB

InnoDB存储引擎最大的亮点就是支持事务和回滚。支持哈希/B树索引类型。

键级别为行键。行锁的优点是适合频繁修改表、高并发的情况。高并发在性能上比MyISAM还要好。缺点是系统消耗大量资金。索引不仅缓存自身,还缓存数据。与MyISAM相比,它需要更大的记忆力。

InnoDB 不会在表中存储一定数量的行。也就是说,当执行select count(*) from table时,InnoDB必须扫描整个表来统计行数。

支持事务和外键。

ACID 事务

A 事务原子性:表示事务已完成或未执行。换句话说,一个事务不能只执行到一半就停止。例如,如果你从ATM机上取款,这笔交易可以分为两个步骤:1)刷卡,2)支付。刷不了卡钱却出不来。这两个步骤必须一起完成,否则根本就没有完成。
C 事务一致性(Consistency):指事务操作不会改变数据库中数据的一致性。例如,完整性限制为a+b=10,如果事务改变了a,那么b也必须改变。
I 隔离性:这些事务的独立性也称为隔离性,意味着两个或多个事务不会以交错的方式执行。因为这会导致数据不一致。
D 持久性:事务持久性是指事务成功执行后,该事务对数据库所做的更改会永久存储在数据库中,不会无故丢失。反弹回来。

内存

内存是内存级别的存储机器。数据存储在内存中,因此可以存储的数据量较小。

由于内存特性,存储引擎不支持数据一致性。锁级别为表锁,不支持事务。但访问速度非常快,并且默认使用哈希索引。

内存存储机使用内存中存储的内容来创建表。每个内存表实际上只对应一个磁盘文件,在磁盘上表示为.frm 文件。

overview

MyISAMinnodb
storagestructure table存储在三个文件中:frm- myd格式定义(mydata)-innodb
storagestruction三个文件中的file:frm——格式定义MYD(MYData)——索引文件MYI(索引文件MY)ll表存储在同一个数据文件(或多个文件,或独立的表空间文件)中。 InnoDB表的大小仅受操作系统文件大小的限制,一般为2GB
存储空间MyISAM可以压缩,存储空间更小InnoDB表需要更多的内存和存储。 。它会在主内存中创建自己专门的缓冲池,用于数据缓存和索引
可能的可移植性、备份和恢复因为MyISAM数据是以文件形式存储的,所以在跨平台数据时会非常方便。转移。在备份和恢复过程中,可以分别对某些表进行操作每个查询的原子性支持事务安全表(符合ACID),具有事务(提交)、回滚(回滚)和崩溃恢复功能
AUTO_INCRMENTConfu索引有其他列的表 InnoDB 必须仅包含此列的索引
SELECTMyISAM 更好
INSERTInnoDB 更好
DELETE InnoDB 是更好它不会再建表,而是逐行删除
COUNT,不用WHEREMyISAM比较好。因为MyISAM在表中存储一定数量的行InnoDB不会在表中存储一定数量的行,需要逐行扫描统计,速度很慢
COUNT和WHERE 与表 InnoDB 相同
lock 仅支持表锁 同时支持表锁和行锁,大大提高了多用户并发操作的性能。但是,InnoDB行键仅在WHERE主键中有效。非主WHERE键会锁定所有表
外键 不支持 支持
FULLTEXT全文索引 支持 4.支持英文全文索引)可以使用Sphinx从InnoDB获取全文索引,会比较慢

通过降低互联网项目中硬件和缓存以及中间件应用的成本,我们一般选择全部使用InnoDB。存储机主要是存储机,很少再选择MyISAM。当业务发展到一定程度,内置存储机不能满足需求时,企业必须有能力自主开发满足自身需求的存储机或购买商用存储机。

作者:麦索
链接:https://juejin.im/post/58d482e844d904006929aaff
来源:掘金版权。商业转载请联系作者获取授权。非商业转载请注明出处。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

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

热门