mysql存储引擎

2018-12-13  本文已影响4人  ZMRWEGo

一个数据库相对于普通文件存储的好处就是它的索引了,数据库可以快速通过索引进行数据的查询,而普通的文件操作系统则要挨个的一次遍历,对于大量的数据来说,数据库的优势显而易见。

mysql主要有四中存储引擎:MyISAM、InnoDB、MEMORY、Archive。

一、MyISAM存储引擎

MyISAM基于ISAM存储引擎(一种较老的存储引擎),并对其进行扩展。他是在web、数据仓库和其他应用环境下最常用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事务

MyISAM的主要特性:
  1. 支持大文件存储
  2. 可以把数据文件和索引文件放在不同目录(InnoDB是放在一个目录里面)

MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图:



假设我们以Col1为主键,则上图是一个MyISAM表的主索引示意。可以看出MyISAM的索引文件仅仅保存数据记录的地址。我们可以创建更多的辅助索引,辅助索引与主索引的区别就是辅助索引的key可以重复。

因此,MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索key,如果指定key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据(行数据)

二、InnoDB存储引擎

InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,InnoDB是mysql的默认存储引擎。

InnoDB的主要特性:
  1. InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎。
  2. InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系型数据库引擎锁不能匹敌的
  3. InnoDB支持外键完整性约束,存储表的数据时,每张表的存储都按照主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个隐藏的主键。

InnoDB也是使用的B+树作为索引的,但与MyISAM不同的是,MyISAM的索引文件和数据文件是分离的,索引文件仅保存数据的地址。而在InnoDB中,表数据本身就是按照B+树组织的,这棵树的叶节点data域保存了完整的数据记录。


第二个与MyISAM素引不同的是InnoDB的辅助素引data域存储相应记录主键的值而不是地址

三、MEMORY存储引擎

MEMORY存储引擎将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问。

MEMORY主要特性有:
1、MEMORY表的每个表可以有多达32个索引,每个索引16列,以及500字节的最大键长度
2、MEMORY存储引擎执行HASH和BTREE缩影
3、可以在一个MEMORY表中有非唯一键值
4、MEMORY表使用一个固定的记录长度格式
5、MEMORY不支持BLOB或TEXT列
6、MEMORY支持AUTO_INCREMENT列和对可包含NULL值的列的索引
7、MEMORY表在所由客户端之间共享(就像其他任何非TEMPORARY表)
8、MEMORY表内存被存储在内存中,内存是MEMORY表和服务器在查询处理时的空闲中,创建的内部表共享
9、当不再需要MEMORY表的内容时,要释放被MEMORY表使用的内存,应该执行DELETE FROM或TRUNCATE TABLE,或者删除整个表(使用DROP TABLE)

四、存储引擎的选择

InnoDB:如果要提供提交、回滚、崩溃恢复能力的事务安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择
MyISAM:如果数据表主要用来插入和查询记录,则MyISAM(但是不支持事务)引擎能提供较高的处理效率
Memory:如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果。数据的处理速度很快但是安全性不高。
Archive:如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archive

上一篇下一篇

猜你喜欢

热点阅读