概况
文章目录
数据库存储引擎,数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,可以获得不同的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。
MySQL5.6开始支持多种存储引擎:InnoDB、MyISAM、Memory、Merge、CSV等,我重点记录InnDB、MyISAM和Memory三种存储引擎。
查看MySQL数据库支持的引擎类型使用:
SHOW ENGINES;
,格式化显示使用SHOW ENGINES \G;
。
一、InnoDB存储引擎
InnoDB是事务型数据库的首选引擎,InnoDB给MySQL的表提供了事物、回滚、崩溃修复能力和多版本并发控制的事物安全。InnoDB是MySQL上第一个提供外键约束的表引擎,InnoDB对事物处理的能力,是其他引擎无法比拟的,MySQL5.5.5之后作为默认存储引擎,下面介绍InnoDB存储引擎的特点及缺点:
- InnoDB存储引擎中支持自动增长列AUTO_INCREMENT。自动增长值不能为空,且值必须唯一,且必须为主键。可插入前面没有出现的过的值。
- InnoDB存储引擎中支持支持外键(FOREIGN KEY),外键所在的表为子表,外键所依赖的表为父表。父表中被子表外键关联的字段必须为主键。
- InnoDB存储引擎中,创建表的表结构存储在
.frm
文件中,数据和索引存储.idb
文件中(可能有多个idb文件)。
InnoDB存储引擎的优势在于提供了良好的事物管理、崩溃修复能力和并发控制。缺点是其读写效率稍差,占用的数据空间较大。
使用场景:更新密集的表、事物(比如银行)、自动灾难恢复。
二、MyISAM存储引擎
MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MySQL5.5.5之前默认引擎是MyISAM。
MyISAM存储引擎的表存储成3个文件:.frm
存储表的结构,.MYD
存储数据(My Data),.MYI
存储索引(My Index)。
1.MyISAM的存储格式
1.静态型
所有表列都是静态,此表会自动定义为静态。字段是固定长度的,存储非常迅速、容易缓存,出现故障容易恢复;占用空间通常比动态表多。
2.动态型
有表列都是动态态,此表会自动定义为动态。占用的空间相对较少,但是频繁的更新删除记录会产生碎片,需要定期执行optimize table或myisamchk -r命令来改善性能,而且出现故障的时候恢复比较困难
3.压缩型
针对只读表,就使用压缩型表。使用myisampack工具创建,占用非常小的磁盘空间。因为每个记录是被单独压缩的,所以只有非常小的访问开支。
2.MyISAM存储引擎的优缺点
MyISAM存储引擎的优点在于占用空间小,处理速度快(插入、查询快)。缺点是不支持事物的完整性和并发性,也不支持外键。
三、MEMORY存储引擎
MEMORY存储引擎是MySQL中比较特殊的存储引擎,它将表中的数据存储在内存中,下面从MEMORY存储引擎从文件格式、索引类型、存储周期和优缺点进行讲解。
1.MEMORY存储引擎的文件格式
每个表对于一个磁盘文件,文件名与表名相同,该文件只存储表结构,类型为.frm
。数据文件存储在内存中,这样有利于对数据的快速处理。
2.MEMORY存储引擎的索引类型
MEMORY存储引擎默认使用哈希索引(HASH),速度比B型数(BTREE)索引快,可以在创建索引时指定。
3.MEMORY存储引擎的存储周期
MEMORY存储引擎的很少用到,因为MEMORY表的所有数据都是存储在内存上的,重启或关机表中的数据就会消失,MEMORY表的生命周期很短。
4.MEMORY存储引擎的优缺点
优点
- 访问数据的速度快,数据都是存储在内存中。
- MEMORY在MySQL4.1.0之后支持自增序列
AUTO_INCREMENT
。 - 不同进程间的数据是互通的。
缺点
- 大小受到限制,
max_rows
在创建表时指定,max_heap_table_size
大小默认16MB,可按需扩大。 - 当mysqld守护进程崩溃时,所有的MEMORY数据都会丢失。
- 不支持VARCHAR、BLOB和TEXT数据类型,因为这种表类型是按固定长度记录格式存储。
四、如何选择存储引擎
根据业务场景,存储引擎特性选择合适的存储引擎:
-
InnoDB存储引擎:用于事物处理应用程序,有ACID事务支持、支持外键。支持崩溃修复能力和并发控制。可实现事物的提交(Commit)和回滚(Rollback)。如果对事物的完整性要求高、要求实现并发控制,或需要频繁的更新、删除操作数据库,就可使用InnoDB存储引擎。
InnoDB存储引擎的使用最为广泛
-
MyISAM存储引擎:管理非事物表,提供高速存储、检索和全文搜索。它插入数据快,空间和内存使用比较低。当表主要用于插入新记录和读出记录,选择MyISAM存储引擎能实现处理的高效率。应用的完整性、并发性要求低,也可使用MyISAM。
-
MEMORY存储引擎:MEMORY存储引擎提供“内存中”表,MEMORY所有的数据都在内存中,数据处理速度快,安全性低。MEMORY不能建太大的表。如果需要很快的读写速度,对数据的安全性要求低,就可以选择MEMORY存储引擎。
五、高手甜点
1.查看系统默认存储引擎
处理SHOW ENGINES
显示系统全部存储引擎外,还可使用下面语句直接查看系统默认存储引擎:
SHOW VARIABLES LIKE 'default_storage_engine';
2.修改默认存储引擎
打开MySQL配置文件my.ini
(可能不是此文件名,但是一定是此文件后缀.ini
),找到default-storage-engine=INNODB
,将INNODB
换成实际需要的引擎就可以。