`
purpen
  • 浏览: 796849 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySQL存储引擎比较

阅读更多

MySQL常用的存储引擎为MyISAM、InnoDB、MEMORY、MERGE,其中InnoDB提供事务安全表,其他存储引擎都是非事务安全表。 

MyISAM是MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。  

InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。  

MEMORY存储引擎使用存在内存中的内容来创建表。 每个MEMORY表只实际对应一个磁盘文件。MEMORY类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用HASH索引。但是一旦服务关闭,表中的数据就会丢失掉 。 

MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同。MERGE表本身没 有数据,对MERGE类型的表进行查询、更新、删除的操作,就是对内部的MyISAM表进行的。 

MyISAM表还支持3中不同的存储格 式: 
1 静态表 
2 动态表 
3 压缩表 
静态表是默认的存储格式,静态表中的字段都是非变长的字段,优点是:存储非 常迅速,容易缓存,出现故障容易恢复;缺点是:占用的空间通常比动态表多。(注意: 在存储时,列的宽度不足时,用空格补足,当时在访问的时候并不会得到这些空格) 
动态表的字段是变长的,优点是:占用的空间相对较少,但是频繁地 更新删除记录会产生碎片,需要定期改善性能,并且出现故障的时候恢复相对比较困难。 
压缩表占用磁盘空间小,每个记录是被单独压缩的,所以只有非 常小的访问开支。 

MySQL支持外键存储引擎只有InnoDB,在创建外键的时候,要求附表必须有对应的索引,子表在创建外键的时候也 会自动创建对应的索引。 
InnoDB存储方式为两种:1 使用共享表空间存储 2 使用多表空间 

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

MERGE用 于将一系列等同的MyISAM表以逻辑方式组合在一起,并作为一个对象引用它。MERGE表的优点在于可以突破对单个MyISAM表大小的限制,通过将不 同的表分布在多个磁盘上,可以有效的改善MERGE表的访问效率。 

 


为了适应各种不同的运行环境,MYSQL 提供了多种不同的存储引擎(Storage  Engine ),在应用程序开发这个层面上,开发者可以根据不同的需求选择适合的Storage  Engine 方案,更为灵活的是,你可以根据每张表将要存储数据的特点,选择不同的Storage  Engine,也就是说,在 一个MYSQL 数 据库中,可以混合使用多种不同的Storage  Engine

首先小瞥一下MySQL 的体系结构,在最高抽象层度下,可以用Garlan & Shaw的分层结构体系来表示(左)
 
其中应用层为所有RDBMS用户提供用户接口,逻辑层包括了所有核心功能的实现,物理层则负责将数据存储在硬件设备上。

图中右侧更为具体的描述了逻辑层的组成,查询处理子系统、事务管理子系统、恢复管理子系统和存储管理子系统共同组成了MySQL 的 逻辑层。相信Storage  Engine 的位置是在Storage  Management 处,既Storage  Engine 属于Storage  Management 子系统的一部分

为了让思路更清晰一些,下面给出一幅比较全面的体系结构图(或更确切的说是流程图,只是忽略了反馈)
 
上面三幅图来自于一篇非官方(不保证百分百的正确)的MySQL 体 系结构的报告,与《High Performance MySQL 》一书中给出的MySQL 大体结构(下图,基本对应于 Logic Layer,从第一幅图右侧可以看出MySQL  logic layer同样遵从分层体系结构)还是比较吻合的。
 
连接上图中第二层和第三层之间的接口是并不针对任何存储引擎的单一 API,.大概由20个基本的类似“启动事务,返回结果集”等函数组成。存储引擎并不处理SQL,相互之间也不通信,它们的任务只是简单的响应高层传来的 请求。

存储引擎各自的一些特点  

上面提到的四种存储引擎都有各自适用的环境,这取决于它们独 有的一些特征。主要体现在性能、事务、并发控制、参照完整性、缓存、 故障恢复,备份及回存等几个方面


目前比较普及的存储引擎是 MyISAM和InnoDB.而MyISAM又是绝大部分Web应用的首选。MyISAM与InnoDB的主要的不同点在于性能和事务控制上。

MyISAM 是早期ISAM(Indexed Sequential Access Method,我现在用的MySQL5.0已经不支持ISAM了)的扩展实现,ISAM被设计为适合处理读频率远大于写频率这样一种情况,因此ISAM以 及后来的MyISAM都没有考虑对事物的支持,排除了TPM,不需要事务记录,ISAM的查询效率相当可观,而且内存占用很少。MyISAM在继承了这类优点的同时,与时俱进的提供了大量实用的新特性和相关工具。例如考虑到并发控制,提供了表级锁,虽然MyISAM本身不支持容错,但可以通过 myisamchk进行故障恢复。而且由于MyISAM是每张表使用各自独立的存储文件(MYD数据文件和MYI索引文件),使得备份及恢复十分方便(拷 贝覆盖即可),而且还支持在线恢复。

所以如果你的应用是不需要事务,处理的只是基本的CRUD操作,那么MyISAM是不二选择

InnoDB 被设计成适用于高并发读写的情况 .使用MVCC(Multi-Version Concurrency Control)以及行级锁来提供遵从ACID的事务支持。InnoDB支持外键参照完整性 ,具备故障恢复能力。另外 InnoDB的性能其实还是不错的,特别是在处理大数据量的情况下,用官方的话说就是: InnoDB的CPU效率是其他基于磁盘的关系数据库存储引擎所不能比的。不过InnoDB的备份恢复要麻烦一点,除非你使用了4.1以后版本提供的 Mulit-tablespace支持,因为InnoDB和MyISAM不同,他的数据文件并不是独立对应于每张表的。而是使用的共享表空间,简单的拷贝 覆盖方法对他不适用,必须在停掉MYSQL 后对进行数据恢复。使用Per-Table Tablespacesd,使其每张表对应一个独立的表空间文件,则情况要简单很多。

一般来说,如果需要事务支持,并且有较高的并发读写 频率,InnoDB是不错的选择。要是并发读写频率不高的话,其实可以考虑BDB,但由于在MySQL5.1及其以后版本中,将不再提供BDB支持。这个 选项也就没有了

至于Heap和BDB(Berkeley DB),相对来说,普及率不如前两种,但在有些情况下,还是挺适用的

Heap 存储引擎就是将数据存储在内存中,由于没有磁盘I./O的等待,速度极快。但由于是内存存储引擎,所做的任何修改在服务器重启后都将消失。
 
Heap 挺适合做测试的时候使用。

BDB是MySQL 第一款事务安全的存储引擎。在 Berkeley DB database library的基础上建立,同样是事务安全的,但BDB的普及率显然不及InnoDB,因为大多数在MySQL 中 寻找支持事务的存储引擎的同时也在找支持MVCC或是行级锁定存储引擎,而BDB只支持Page-level Lock。

分享到:
评论

相关推荐

    mysql存储引擎比较

    ### MySQL存储引擎比较 #### 一、概述 MySQL是一款广泛使用的开源关系型数据库管理系统,在不同的应用场景下,选择合适的存储引擎至关重要。MySQL支持多种存储引擎,每种存储引擎都有其独特的特性和适用场景。本文...

    mysql-存储引擎-实验四.docx

    在实验中,我们将 MyISAM 引擎的表修改为 InnoDB 引擎,并比较了两种存储引擎的特点和使用方法。在 MySQL 中,可以使用 ALTER TABLE 语句将表的存储引擎修改为其他类型。 4. 建立学生表,学号 3188909101 开始自动...

    mysql存储引擎介绍

    MySQL 存储引擎详解 MySQL 存储引擎是 MySQL 数据库管理系统中的一种机制,用于管理和存储数据。 MySQL 提供了多种存储引擎,每种引擎都有其特点和优缺。了解 MySQL 存储引擎的特点和优缺是非常重要的,因为它们...

    MySql 存储引擎介绍

    MySQL体系结构 MySQL存储引擎 InnoDB存储引擎

    MySQL存储引擎简介

    MySQL存储引擎是数据库管理系统中负责数据存储和索引管理的核心组件,它允许MySQL数据库系统在不同的存储需求下灵活选择最优的存储方案。在众多数据库系统中,MySQL独树一帜,提供了多种存储引擎供用户选择,使得...

    mySql 存储引擎 启用 Innodb

    ### MySQL存储引擎启用InnoDB详解 #### 一、引言 在MySQL数据库系统中,存储引擎扮演着极其重要的角色,它决定了数据如何被存储、检索和管理。其中,InnoDB作为MySQL中最常用的存储引擎之一,提供了众多高级特性,...

    MySQL内核:InnoDB存储引擎 卷1.pdf

    《MySQL内核:InnoDB存储引擎 卷1》由资深MySQL专家,机工畅销图书作者亲自执笔,在以往出版的两本InnoDB介绍性图书的基础之上,更深入地介绍InnoDB存储引擎的内核,例如latch、B+树索引、事务、锁等,从源代码的...

    MySQL数据库:MySQL存储引擎.pptx

    而MySQL数据库提供了多种存储引擎,用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎,MySQL的核心就是存储引擎。 ;MySQL 5.7支持的存储引擎有:InnoDB、MyISAM、...

    第6章MySQL存储引擎与数据库.docx

    MySQL存储引擎是数据库管理系统的核心组件,它决定了数据如何在MySQL中存储、检索和管理。不同的存储引擎具有不同的特性和用途,以适应各种应用场景。在MySQL中,存储引擎主要负责数据的物理存储方式、事务处理、...

    MySQL技术内幕 InnoDB存储引擎.pdf

    最近在学习MySQL技术内幕 InnoDB存储引擎 第2版,整理了一些文档分享出来,同时也方便以后查看。若有不当之处,烦请批评指正。 1. MySQL体系结构和存储引擎 2. InnoDB存储引擎 2.1 InnoDB体系结构 2.2 ...

    MySQL存储引擎学习

    MySQL存储引擎学习 MySQL存储引擎是MySQL数据库管理系统的核心组件之一,负责数据的存储和提取。 MySQL的存储引擎架构可以分为四个层次:连接层、服务层、引擎层和存储层。其中,引擎层是存储引擎的真正实现者,...

    mysql存储引擎(csdn)————程序.pdf

    MySQL存储引擎是数据库管理系统的核心组件,它决定了数据如何被存储、检索和管理。在MySQL中,不同的存储引擎提供了不同的特性和功能,以适应各种应用场景。本文将深入探讨两种常见的存储引擎——InnoDB和MyISAM,并...

    MySQL内核:InnoDB存储引擎 卷1.pdf.zip

    《MySQL内核:InnoDB存储引擎 卷1》是一本深度探讨MySQL数据库系统核心部分——InnoDB存储引擎的专业书籍。这本书以超高清的PDF格式呈现,包含详细的书签,便于读者快速定位和查阅相关内容。InnoDB作为MySQL中最常用...

    MySQL存储引擎解析.doc

    MySQL存储引擎是数据库管理系统的核心组成部分,负责数据的存储和访问方式。MySQL系统由多个组件构成,包括管理工具、连接池、SQL接口、分析器、优化器、缓存、存储引擎和硬盘。其中,存储引擎是专门处理表数据的...

    mysql内核 innodb存储引擎

    《MySQL技术内幕:InnoDB存储引擎》是国内目前唯一的一本关于InnoDB的著作,由资深MySQL专家亲自执笔,中外数据库专家联袂推荐,权威性毋庸置疑。内容深入,从源代码的角度深度解析了InnoDB的体系结构、实现原理、...

    深入MySQL存储引擎比较的详解

    MySQL存储引擎是数据库管理系统的核心组件,它决定了数据的存储方式、事务处理机制以及查询性能等方面。MySQL支持多种存储引擎,每种引擎都有其特定的优势和适用场景。以下是对几种主要存储引擎的详细比较: 1. **...

    MySQL技术内幕 InnoDB存储引擎.pptx

    "MySQL技术内幕 InnoDB存储引擎" 《MySQL技术内幕:InnoDB存储引擎》是一本深入解析InnoDB存储引擎的经典之作,由国内资深MySQL专家亲自执笔,国内外多位数据库专家联袂推荐。本书从源代码的角度深度解析了InnoDB的...

    MySQL课程之MySQL存储引擎入门

    MySQL是世界上最流行的关系型数据库管理系统之一,其强大的功能和灵活性主要得益于它支持多种存储引擎。在MySQL课程中,深入理解存储引擎是至关重要的,因为不同的存储引擎有着不同的特性和适用场景,这直接影响到...

    mysql-存储引擎和数据库对象实验五.docx

    MySQL 存储引擎和数据库对象实验报告 本实验报告主要介绍 MySQL 中的存储引擎和数据库对象,涵盖了 MEMORY 存储引擎、MERGE 存储引擎、CHAR、VARCHAR、TEXT、BLOB 等类型的使用和特点,以及浮点数、定点数、日期...

Global site tag (gtag.js) - Google Analytics