MySQL存储引擎简介
数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。简而言之,存储引擎就是指表的类型。数据库的存储引擎决定了表在计算机中的存储方式。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。
在 MySQL 中,可以对每一个表使用不同的存储引擎。MySQL 5.7 支持的存储引擎有InnoDB、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE等,下面将简单介绍InnoDB、MyISAM和Memory三种常用的存储引擎。
常用存储引擎
MySQL InnoDB存储引擎
MySQL 5.6及以后的版本,默认的存储引擎是InnoDB。
InnoDB引擎支持事务(ACID),支持崩溃修复和自增列,支持行锁定和外键。
其特点如下:
使用的锁粒度为行级锁,从而支持更高的并发。
给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全ACID。
InnoDB是为处理大数据量而做的最大性能设计,其CPU计算效率优于其他基于磁盘的关系型数据库引擎。
支持外键完整性约束,存储表中的数据时按主键顺序存放。
可以通过auto_increment设置自动增长列。
MySQL MyISAM存储引擎
在 MySQL 5.1 版本及之前的版本,MyISAM是默认的存储引擎。
MyISAM引擎查询效率高,但是不支持事务,也不支持外键。使用此引擎创建数据库会生成3个文件,包括表定义文件frm、表数据文件myd和索引文件myi。
其特点如下:
使用的锁粒度为表级锁,不支持行级锁,添加和修改时会进行锁表操作,因此写入效率较低。
索引会单独存放.myi文件,且它的索引是直接定位到OFFSET的,查询效率较高。
每个MyISAM表可创建的最大索引数是64,每个索引最大可含列数是16。
BLOB和TEXT列可以被用于索引。
VARCHAR和CHAR列可存储的内容多达64KB。
MySQL Memory存储引擎
Memory存储引擎将表中的数据存储到内存RAM中,为查询和引用其他表数据提供快速访问。每个Memory表会与一个磁盘文件frm相关联。
其特点如下:
使用的锁粒度为表级锁,在查询量比较大时会出现性能瓶颈。
支持的数据类型有限制,不支持TEXT和BLOB类型。对于字符串类型的数据,VARCHAR会被自动存储为CHAR,造成空间浪费。
数据存放在内存中,默认使用HASH索引,查询速率快。
每个Memory表可创建的索引为32,每个索引可含16列。
对表的大小有限制,太大的表无法缓存在内存中。如果一个内部表很大,会被转化为磁盘表。
如何选择存储引擎
对于上述三种引擎,我们对其支持的特性总结如下表。
————————————————
版权声明:本文为CSDN博主「三爷麋了鹿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u800820/article/details/128178222