MYSQL存储引擎介绍

上传人:ji****72 文档编号:37524235 上传时间:2018-04-17 格式:DOCX 页数:15 大小:162.44KB
返回 下载 相关 举报
MYSQL存储引擎介绍_第1页
第1页 / 共15页
MYSQL存储引擎介绍_第2页
第2页 / 共15页
MYSQL存储引擎介绍_第3页
第3页 / 共15页
MYSQL存储引擎介绍_第4页
第4页 / 共15页
MYSQL存储引擎介绍_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《MYSQL存储引擎介绍》由会员分享,可在线阅读,更多相关《MYSQL存储引擎介绍(15页珍藏版)》请在金锄头文库上搜索。

1、MYSQLMYSQL 存储引擎介绍存储引擎介绍MYSQLMYSQL 数据库简介数据库简介通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合。我们通常说的 MySql 数据库,sql server 数据库等等其实是数据库管理系统,它们可以存储数据,并提供查询和更新数据库中的数据的功能等等。根据数据库如何存储数据和如何操作数据的实现机制不同,这些数据库之间即有区别又有共同点。MySql 数据库是开放源代码的关系型数据库。目前,它可以提供的功能有:支持 sql 语言、子查询、存储过程、触发器、视图、索引、事务、锁、外键约束和影像复制等。在后期,

2、我们会详细讲解这些功能。同 Oracle 和 SQL Server 等大型数据库系统一样,MySql 也是客户/服务器系统并且是单进程多线程单进程多线程架构的数据库。MySql 区别于其它数据库系统的一个重要特点是支持插入式存储引擎支持插入式存储引擎。什么事存储引擎什么事存储引擎存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。在 Oracle 和 SQL Server 等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而 MySql 数

3、据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。MySQL 插件式存储引擎的体系结构插件式存储引擎的体系结构MYSQLMYSQL 有哪些存储引擎有哪些存储引擎1 1 MyISAMMyISAM:这种引擎是 mysql 最早提供的。这种引擎又可以分为静态 MyISAM、动态MyISAM 和压缩 MyISAM 三种:静态静态 MyISAMMyISAM:如果数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型。因为数据表中每一条记录所占用的空间都是一样的,所以这种表存取和更新的效率非常高。当数据受损时,恢复工作也比较

4、容易做。动态动态 MyISAMMyISAM:如果数据表中出现 varchar、xxxtext 或 xxxBLOB 字段时,服务器将自动选择这种表类型。相对于静态 MyISAM,这种表存储空间比较小,但由于每条记录的长度不一,所以多次修改数据后,数据表中的数据就可能离散的存储在内存中,进而导致执行效率下降。同时,内存中也可能会出现很多碎片。因此,这种类型的表要经常用 optimize table 命令或优化工具来进行碎片整理。压缩压缩 MyISAMMyISAM:以上说到的两种类型的表都可以用 myisamchk 工具压缩。这种类型的表进一步减小了占用的存储,但是这种表压缩之后不能再被修改。另外,

5、因为是压缩数据,所以这种表在读取的时候要先时行解压缩。但是,不管是何种 MyISAM 表,目前它都不支持事务,行级锁和外键约束的功能。2 2 MyISAMMyISAM MergeMerge 引擎:引擎:这种类型是 MyISAM 类型的一种变种。合并表是将几个相同的 MyISAM 表合并为一个虚表。常应用于日志和数据仓库。3 3 InnoDBInnoDB:InnoDB 表类型可以看作是对 MyISAM 的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能。4 4 memory(heap)memory(heap):这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为

6、是存在于内存中,所以这种类型常应用于临时表中。5 5 archivearchive:这种类型只支持 select 和 insert 语句,而且不支持索引。常应用于日志记录和聚合分析方面。当然 MySql 支持的表类型不止上面几种。各种存储引擎特性比较:在实际工作中,选择一个合适的存储引擎是一个很复杂的问题。每种存储引擎都有各自的优势,不能笼统的说谁比谁更好。下面将详解不同环境经常用到的存储引擎和针对各个存储引擎的特点进行对比,给出不同的选择建议。InnoDB 存储引擎InnoDB 是 Mysql 数据库的一种存储引擎。InnoDB 给 Mysql 的表提供了 事务、回滚、崩溃修复能力、多版本并

7、发控制的事务安全、间隙锁(可以有效的防止幻读的出现)、支持辅助索引、聚簇索引、自适应 hash 索引、支持热备、行级锁。还有 InnoDB 是Mysql 上唯一一个提供了外键约束的引擎。InnoDB 存储引擎中,创建的表的表结构是单独存储的并且存储在.frm 文件中。数据和索引存储在一起的并且存储在表空间中。但是默认情况下 mysql 会将数据库的所有InnoDB 表存储在一个表空间中的。其实这种方式管理起来非常的不方便而且还不支持高级功能所以建议每个表存储为一个表空间实现方式为:使用服务器变量innodb_file_per_table = 1。如果需要频繁的进行更新、删除操作的数据库也可选择

8、 InnoDB 存储引擎。因为该存储引擎可以实现事务提交和回滚。MyISAM 存储引擎MyISAM 存储引擎是 Mysql 中常见的存储引擎,MyISAM 存储引擎是基于 ISAM存储引擎发展起来的。MyISAM 支持全文索引、压缩存放、空间索引(空间函数)、表级锁、延迟更新索引键。但是 MyISAM 不支持事务、行级锁、更无法忍受的是崩溃后不能保证完全恢复(只能手动修复)。MyISAM 存储引擎的表存储成 3 个文件。文件的名字和表的名字相同。扩展名包含frm、MYD、MYI。其中 frm 为扩展名的文件存储表的结构;MYD 为扩展名的文件存储数据,其是 MYData 的缩写;MYI 为扩展

9、名的文件存储索引,其为 MYIndex 的缩写。MyISAM 存储引擎的插入数据很快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择 MyISAM 存储引擎能够实现处理的高效率。如果应用的完整性、并发性要求很低,也可以选择 MyISAM 存储引擎。ARCHIVEARCHIVE,见名之意可看出是归档,所以归档之后很多的高级功能就不再支持了仅支持插入(insert)和查询(select)两种功能, ARCHIVE 存储引擎之前还不支持索引(在 Mysql5.5 以后开始支持索引了),但是它拥有很好的压缩机制。通常用于做仓库使用。ARCHIVE 存储引擎适用于存储日志信息或其他

10、按时间序列实现的数据采集类的应用场景中。CSVCSV 是将数据文件保存为 CSV 格式的的文件的,可以方便的导入到其他数据库中去(例如:excel 表格,SQLserver 等等),由此需要在数据库间自由共享数据时才偶尔建议使用此存储引擎。并且它也不支持索引;个人认为仅适用于数据交换。BLACKHOMEBLACKHOME 叫做黑洞,也就是说没有存储机制,任何数据都会被丢弃,但是会记录二进制日志。一般在 Mysql 复制(中继服务器)中经常用到,这个在 Mysql 复制博客中将详细介绍,敬请关注。FEDERATEDFEDERATED 可以实现跨服务器整理表,简单说就是它可以访问远程服务器上数据的

11、存储引擎,所以说它不再本地创建数据只会自动的建立一个连接到其他服务器上链接,有点类似于代理的功能,默认都是禁用的。MEMORY 存储引擎MEMORY 存储引擎是 Mysql 中的一类特殊的存储引擎。其使用存储在内存中的内存来创建表,而且所有数据保存在内存中。数据安全性很低,但是查找和插入速度很快。如果内存出现异常就会影响到数据的完整性,如果重启或关机,表中的所有数据就会丢失,因此基于 MEMORY 存储引擎的表的生命周期很短,一般都是一次性的。适用于某些特殊场景像查找和映射,缓存周期性的聚合数据等等。MRG_MYISAMMRG_MYISAM 存储引擎是合并 MyISAM 表的,就是将多个 My

12、ISAM 合并为一个(在用户看来是一个进行工作,其实是多个底层物理文件在运行工作)。扩展一些第三方存储引擎(1)、OLTP 类:XtraDB:InnoDB 的改进版PBXT:支持复制,外键约束,而且支持在固态存储(SSD 硬盘)上快速存取数据,是一个不错的支持事务的存储引擎,但是此存在的 bug 已不再修复,被弃用。TokuDB:图库数据库,在存储海量数据的方面有着 mysql 无法比拟的优势,也有mysql 版的,其最大优势支持分形树索引结构,这个结构导致它和缓存无关也就直接导致了就算索引在数据库文件中放不下也不会影响性能。一般只适用于大量插入数据的分析型场景。(注释:这里的图不是照片等,而

13、是复杂数据连接的数据结构。)(2)、列式存储引擎列式数据库:此种数据库最适合存储大数据,在数据检索上也很好但是在一定程度上需要反关系存储,因此可能无法满足我们关系型数据库范式的概念所以被称为Nosql。下面介绍几个列式存储引擎(都有两个版本:社区版、商业版):Infobright:适合于数十 TB 的大环境中、支持数据压缩,默认情况下 mysql 不支持列式存储功能需要定制。使用者众多,名气很高。MonetDB:首先,它的存储模型是对数据从垂直方向进行切分;其次,MonetDB是第一个利用 CPU 缓存对数据的查询进行优化的数据库系统;此外,MonetDB 会自动管理和协调索引机制,优化查询效

14、率。目前使用者不是很多。InfiniDB:InfiniDB Community Edition (社区版)提供一个可伸缩的分析型数据库引擎,主要为数据仓库、商业智能、以及对实时性要求不严格的应用而开发。基于MySQL 搭建。包括对查询、事务处理以及大数据量加载的支持。目前使用者不是很多。LucidDB:是唯一一款专注于数据仓库和商务智能的开源 RDBMS,它使用了列存储架构,支持位图索引,哈希连接/聚合和页面级多版本,大部分数据库最初都注重事务处理能力,而分析功能都是后来才加上去的。相反,LucidDB 中的所有组件从一开始就是为满足灵活的需求,高性能数据集成和大规模数据查询而设计的,此外,其

15、架构设计彻底从用户出发,操作简单。目前使用者不是很多。(3)、社区存储引擎(了解):Aria:Maria 的下一代版本。Groona:可以精确的实现全文索引引擎,可以替代 MyISAM 在索引上的特性。QQGraph:支持图操作,由 Open query 研发Sphinx:外在的服务器能够在 Mysql 基础上为 Mysql 构建一个高效的全文索引,通过 C+研发,Mysql 支持一个社区引擎叫 SphinxSE,就是让 Sphinx 直接支持Mysql 接口,在 MariaDB5.5.32 上被编译支持了。Spider:支持分片,每一个独立的分片可以实现独立的查询。VPForMySQL:支持

16、垂直分区,支持更大级别的数据操作更大级别的数据存储。选择标准:1、是否需要支持事务?2、是否需要使用热备?3、崩溃恢复:能否接受崩溃?个人建议:存储日志或按时间增长的数据:MyISAM、ARCHIVE论坛应用:InnoDB电商订单:InnoDB数据量大:Infobright、NoSQL、Sphinx主要存储引擎对比主要存储引擎对比InnoDBInnoDB 与与 MyisamMyisam 的六大区别的六大区别MyISAMMyISAMInnoDBInnoDB构构 成上的区别:成上的区别:每个 MyISAM 在磁盘上存储成三个文件。第一个 文件的名字以表的名字开始,扩展名指出文件类型。.frm 文件存储表定义。数据文件的扩 展名为.MYD (MYData)。索引文件的扩 展名是.MYI (MYIndex)。基于磁盘的资源是 InnoDB 表空间数据文件和它的日志文件,InnoDB 表的 大小只受限于操作系统文件的大小,一般为 2GB事务处理上方面事务处理上方面: :MyISAM 类型的表强调的是性能,其执行数 度比 InnoDB 类型更快,但是不提供事务支持

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号