MySQL存储引擎

一、MySQL常用存储引擎:

  1. 存储引擎:MySQL操作文件的子系统,是基于表的,不是基于数据库的。
  2. MySQL:插件式存储引擎数据库

二、分类:

1、InnoDB存储引擎

(1)InnoDB存储引擎是windows默认的,提供具有提交、回滚和崩溃回复能力的事务安全。支持事务、DLTP:事务联机处理;不支持全文索引、支持行锁:通过索引查询时才支持行锁,非索引列查询时支持表锁(所以说支持行锁不是绝对的)。

相对于MylSAM引擎写的处理效率要差一点,而且占用更多的磁盘空间以保留数据和索引。

特点:支持自动增长列,支持外键约束,一般来说,如果需要事务支持,并且有较高的并发读取频率,可以选择InnoDB。

使用场景:

(1)更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。
(2)事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
(3)自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
(4)外键约束。MySQL支持外键的存储引擎只有InnoDB。
(5)支持自动增加列AUTO_INCREMENT属性。

2、MyISAM存储引擎

(1)在mysql客户端中,使用show engines命令可以查看MySQL支持的引擎。

(2)MyISAM表是独立于操作系统的,这说明可以轻松地将其从Windows服务器移植到Linux服务器;每当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,文件名就是表名。

例如,建立了一个MyISAM引擎的tb_Demo表,那么就会生成以下三个文件:

tb_demo.frm,存储表定义;
tb_demo.MYD,存储数据;
tb_demo.MYI,存储索引。

(3)使用场景:MyISAM表无法处理事务,这就意味着有事务处理需求的表,不能使用MyISAM存储引擎。

(4)AMyISAM存储引擎:不支持事务、也不支持外键,支持表锁。较高的插入、查询速度,对事务完整性没有要求,以select、insert为主的应用基本上可以用这个引来创建表。

支持三种不同的存储格式:静态表、动态表、压缩表

(5)静态表:表中的字段都是非变长字段,优点存储非常迅速,容易缓存,出现故障容易恢复;缺点是缺点是占用的空间通常比动态表多(因为存储时会按照列的宽度定义补足空格)ps:在取数据的时候,默认会把字段后面的空格去掉,如果不注意会把数据本身带的空格也会忽略。

(6)动态表:记录不是固定长度的,这样存储的优点是占用的空间相对较少;缺点:频繁的更新、删除数据容易产生碎片,需要定期执行OPTIMIZE TABLE或者myisamchk-r命令来改善性能

(7)压缩表:因为每个记录是被单独压缩的,所以只有非常小的访问开支。

3、MEMORY存储引擎

(1)MEMORY存储引擎数据存放在内存中,所以使用内存中的内容来创建表。每个memory表只实际对应一个磁盘文件。因为数据在内存中所以访问和查询效率高,默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。

(2)它要求存储在Memory数据表里的数据使用的是长度不变的格式,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型,VARCHAR是一种长度可变的类型,但因为它在MySQL内部当做长度固定不变的CHAR类型,所以可以使用。

(3)使用场景:

A、目标数据较小,被非常频繁地访问。在内存中存放数据,所以会造成内存的使用,可以通过参数max_heap_table_size控制Memory表的大小,设置此参数,就可以限制Memory表的最大大小。

B、如果数据是临时的,而且要求必须立即可用,那么就可以存放在内存表中。

C、存储在Memory表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。

Memory同时支持散列索引和B树索引。B树索引的优于散列索引的是,可以使用部分查询和通配查询,也可以使用<、>和>=等操作符方便数据挖掘。散列索引进行“相等比较”非常快,但是对“范围比较”的速度就慢多了,因此散列索引值适合使用在=和<>的操作符中,不适合在<或>操作符中,也同样不适合用在order by子句中。

(4)MEMORY存储引擎的表可以选择使用BTREE索引或者HASH索引,两种不同类型的索引有其不同的使用范围。

Hash索引优点: 
Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。 
Hash索引缺点: 那么不精确查找呢,也很明显,因为hash算法是基于等值计算的,所以对于“like”等范围查找hash索引无效,不支持;

Memory类型的存储引擎主要用于哪些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效地对中间结果进行分析并得到最终的统计结果,。对存储引擎为memory的表进行更新操作要谨慎,因为数据并没有实际写入到磁盘中,所以一定要对下次重新启动服务后如何获得这些修改后的数据有所考虑。

4、MERGE存储引擎

(1)Merge存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,merge表本身并没有数据,对merge类型的表可以进行查询,更新,删除操作,这些操作实际上是对内部的MyISAM表进行的。说白了,Merge表就是几个相同MyISAM表的聚合器;

(2)使用场景。

对于服务器日志这种信息,一般常用的存储策略是将数据分成很多表,每个名称与特定的时间端相关。例如:可以用12个相同的表来存储服务器日志数据,每个表用对应各个月份的名字来命名。当有必要基于所有12个日志表的数据来生成报表,这意味着需要编写并更新多表查询,以反映这些表中的信息。与其编写这些可能出现错误的查询,不如将这些表合并起来使用一条查询,之后再删除Merge表,而不影响原来的数据,删除Merge表只是删除Merge表的定义,对内部的表没有任何影响。

5、ARCHIVE存储引擎

Archive是归档的意思,在归档之后很多的高级功能就不再支持了,仅仅支持最基本的插入和查询两种功能。在MySQL 5.5版以前,Archive是不支持索引,但是在MySQL 5.5以后的版本中就开始支持索引了。Archive拥有很好的压缩机制,它使用zlib压缩库,在记录被请求时会实时压缩,所以它经常被用来当做仓库使用。

三、补充对比        

MyISAM: Mysql的默认数据库,最为常用。拥有较高的插入,查询速度,但不支持 事务

InnoDB : 事务型数据库的首选引擎,支持 ACID事务,支持行级锁定

BDB: 源自Berkeley DB, 事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性

Memory :所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失

Merge :将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用

Archive :非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差

Federated: 将不同的Mysql服务器联合起来,逻辑上组成一个完整的 数据库。非常适合 分布式应用

Cluster/NDB :高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用

CSV: 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。

BlackHole :黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值