2021-03-02

MySQL

引擎

什么是引擎

存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。

mysql 有多种存储引擎,目前常用的是 MyISAM 和 InnoDB 这两个引擎,除了这两个引擎以外还有许多其他引擎,有官方的,也有一些公司自己研发的。这篇文章主要简单概述一下常用常见的 MySQL 引擎,一则这是面试中常被问到的问题,二则这也是数据库设计中不可忽略的问题,用合适的引擎可以更好的适应业务场景,提高业务效率。

MyISAM

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

锁级别为表锁,表锁优点是开销小,加锁快;缺点是锁粒度大,发生锁冲动概率较高,容纳并发能力低,这个引擎适合查询为主的业务。

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

MyISAM 强调了快速读取操作。它存储表的行数,于是 SELECT COUNT (*) FROM TABLE 时只需要直接读取已经保存好的值而不需要进行全表扫描。

InnoDB

InnoDB 存储引擎最大的亮点就是支持事务,支持回滚,它支持 Hash/B-tree 索引类型。

锁级别为行锁,行锁优点是适用于高并发的频繁表修改,高并发是性能优于 MyISAM。缺点是系统消耗较大,索引不仅缓存自身,也缓存数据,相比 MyISAM 需要更大的内存。

InnoDB 中不保存表的具体行数,也就是说,执行 select count (*) from table 时,InnoDB 要扫描一遍整个表来计算有多少行。

支持事务,支持外键。

ACID 事务

A 事务的原子性 (Atomicity):指一个事务要么全部执行,要么不执行。也就是说一个事务不可能只执行了一半就停止了。比如你从取款机取钱,这个事务可以分成两个步骤:1)划卡,2)出钱。不可能划了卡,而钱却没出来,这两步必须同时完成,要么就不完成。
C 事务的一致性 (Consistency):指事务的运行并不改变数据库中数据的一致性。例如,完整性约束了 a+b=10,一个事务改变了 a,那么 b 也应该随之改变。
I 独立性 (Isolation):事务的独立性也有称作隔离性,是指两个以上的事务不会出现交错执行的状态。因为这样可能会导致数据不一致。
D 持久性 (Durability):事务的持久性是指事务执行成功以后,该事务所对数据库所作的更改便是持久的保存在数据库之中,不会无缘无故的回滚。

Memory

Memory 是内存级别存储引擎,数据存储在内存中,所以他能够存储的数据量较小。

因为内存的特性,存储引擎对数据的一致性支持较差。锁级别为表锁,不支持事务。但访问速度非常快,并且默认使用 hash 索引。

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

总结

在这里插入图片描述
互联网项目中随着硬件成本的降低及缓存、中间件的应用,一般我们选择都以 InnoDB 存储引擎为主,很少再去选择 MyISAM 了。而业务真发展到一定程度时,自带的存储引擎无法满足时,这时公司应该是有实力去自主研发满足自己需求的存储引擎或者购买商用的存储引擎了。

猜你喜欢

转载自blog.csdn.net/qq_44656258/article/details/114278449