一、简介
数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。
MySQL中有两种类型的存储引擎:事务性和非事务性。
对于mysql来说,存储引擎是以插件的形式运行的。虽然mysql支持种类繁多的存储引擎,但是常用的就那么几种。
在MySQL中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎
二、相关操作
1、存储引擎查看
SHOW ENGINES
support列的值表示某种引擎是否能使用:YES表示可以使用、NO表示不能使用、DEFAULT表示该引擎为当前默认的存储引擎.
三、MySQL常用存储引擎介绍
1、InnoDB存储引擎
InnoDB 是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。MySQL5.5.5之后,InnoDB 作为默认的存储引擎,InnoDB 主要特性有:
支持事务操作。InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎
使用的锁粒度为行级锁,可以支持更高的并发
InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系型数据库引擎锁不能匹敌的
支持外键完整性约束。
实现了缓冲管理,不仅能缓冲索引也能缓冲数据,并且会自动创建散列索引以加快数据的获取
对于InnoDB类型的表,基于聚簇索引建立的。其数据的物理组织形式是聚簇表。所有的数据按照主键来组织。数据和索引放在一块,都位于B+数的叶子节点上
采用MVCC支持高并发,实现了四个标准的隔离级别,默认隔离级别REPEATABLE READ(可重复读),通过间隙锁(next-key lock)防止幻读
支持真正的热备份
InnoDB不创建目录,使用InnoDB时,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件
2、MyISAM存储引擎
MyISAM 基于 ISAM 的存储引擎,并对其进行扩展。它是在Web、数据存储和其他应用环境下最常使用的存储引擎之一。MyISAM 拥有较高的插入、查询速度,但不支持事务。在 MySQL5.5.5 之前的版本中,MyISAM 是默认的存储引擎。MyISAM 主要特性有:
不支持事务和行级锁
使用表级锁,并发性差
主机宕机后,MyISAM表易损坏,灾难恢复性不佳
可以把数据文件和索引文件放在不同目录
BLOB和TEXT列可以被索引
索引的结构是B+树结构,只缓存索引,数据的缓存是利用操作系统缓冲区来实现的。可能引发过多的系统调用且效率不佳
使用 MyISAM 引擎创建数据库,将产生3个文件。文件的名字以表的名字开始,扩展名指出文件类型:frm 文件存储表定义,数据文件的扩展名为 .MYD(MYData),索引文件的扩展名是 .MYI(MYIndex)。
3、MEMORY存储引擎
MEMORY存储引擎将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问。MEMORY主要特性有:
- 不支持TEXT和BLOB类型,对于字符串类型的数据,只支持固定长度的行,VARCHAR会被自动存储为CHAR类型
- 使用表级锁,虽然内存访问快,但如果频繁的读写,表级锁会成为瓶颈
- 由于数据是存放在内存中,一旦服务器出现故障,数据都会丢失;
- 默认使用hash索引
四、引擎对比选择
1、如果要提供提交、回滚和崩溃恢复能力的事务安全(ACID兼容)能力,并要求实现并发控制,InnoDB 是个很好的选择(系统并发高、事务要求高的大型互联网系统)。
2、如果数据表主要用来插入和查询记录,则 MyISAM 引擎能提供较高的处理效率(后台管理系统和简单系统)。
3、如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以将数据保存在内存中的 Memory 引擎。MySQL 中使用该引擎作为临时表,存放查询的中间结果(日志存储等数据不重要的数据)。
大部分情况下,InnoDB 都是正确的选择,除非一定要用到某些InnoDB 不具备的特性的时候,才考虑其他引擎。
除非万不得已,千万不要混用多种存储引擎。(高性能mysql一书中说的!)