一、什么是存储引擎

  数据库就是一种对数据进行管理和存储的软件,而它能够实现存储和管理数据的原因就是因为存储引擎的存在,存储引擎就是对存储数据、为存储的数据建立索引以及更新、查询数据等技术的实现方法;在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎,用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。

二、存储引擎都有哪些特性

  存储引擎所处理的事情,其特性可以总结为以下几点:

  • 并发性:能够让应用程序实现颗粒级锁定。
  • 事务支持:事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。
  • 引用完整性:通过DDL定义的外键,服务器需要强制保持关联数据库的引用完整性。
  • 物理存储:它包括各种各样的事项,从表和索引的总的页大小,到存储数据所需的格式,到物理磁盘。
  • 索引支持:不同的应用程序倾向于采用不同的索引策略,每种存储引擎通常有自己的编制索引方法,但某些索引方法(如B-tree索引)对几乎所有的存储引擎来说是共同的。
  • 内存高速缓冲:不同的应用程序对某些高速缓冲策略的效应效果也有所不同。尽管某些内存高速缓冲对所有存储引擎来说是共同的,其它策略可在使用特殊引擎时才唯一定义
  • 性能帮助:包括针对并行操作的多I/O线程,线程并发性,数据库检查点,成批插入处理等。
  • 其他目标特性:可能包括对地理空间操作的支持,对特定数据处理操作的安全限制等。

  以上要求会在不同的需求中予以体现,通过单独一个系统实现是不可能的,以上特点有些本身就是相互矛盾的,对以上内容做些选择,形成的存储引擎就是一个插件引擎了,某些特定的需求可以使用。如下图,部分现有的存储引擎以及基本特点:

特点 Myisam BDB Memory InnoDB Archive
存储限制 没有 没有 64TB 没有
事务安全   支持   支持  
锁机制 表锁 页锁 表锁 行锁 行锁
B树索引 支持 支持 支持 支持  
哈希索引     支持 支持  
全文索引 支持        
集群索引       支持  
数据缓存     支持 支持  
索引缓存 支持   支持 支持  
数据可压缩 支持       支持
空间使用 N/A 非常低
内存使用 中等
批量插入的速度 非常高
支持外键       支持  

三、MySQL中常使用的引擎

  1、MyISAM:这种引擎是mysql最早提供的,这种引擎又可以分为静态MyISAM、动态MyISAM 和压缩MyISAM三种:

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

    每当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,文件名就是表明。例如,我建立了一个MyISAM引擎的tb_Demo表,那么就会生成以下三个文件:

       1.tb_demo.frm,存储表定义;

      2.tb_demo.MYD,存储数据;

      3.tb_demo.MYI,存储索引。

  2、InnoDB:InnoDB表类型可以看作是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能。

四、MyISAM v.s InnoDB

 

MyISAM

InnoDB

事务处理方面:  MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但是不提供事务支持  InnoDB提供事务处理功能,外部键等高级数据库功能
存储文件组成上的区别:  不支持单表一个文件,会将所有的数据和索引内容分别存在两个文件中; 将数据存储在表空间中,表空间由一系列的数据文件组成,由InnoDB管理;
  支持每个表的数据和索引存放在单独文件中(innodb_file_per_table);
增删改查操作  MyISAM存储引擎在筛选大量数据时非常迅速,这是他的突出优点

1.如果你的数据执行大量的插入或更新操作,,出于性能方面的考虑,应该使用InnoDB

2.删表时,InnoDB不会重新建立表,而是一行一行的删除。

表的具体行数的保存  MyISAM用一个变量保存了整个表的行数,执行select count(*) from table时只需要读出该变量即可,速度很快;  InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。
 MyISAM存储引擎只支持表锁

InnoDB提供行锁

主键范围 大,最大是MyISAM的2倍。
外键 不提供 提供
全文索引           支持 不支持
GIS数据 支持 不支持

总结:MyISAM引擎是一种非事务性的引擎,提供高速存储和检索,以及全文搜索能力;

      InnoDB是一种支持事务的引擎,给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全的(ACID兼容)存储引擎。

五、其它存储引擎特点总结:

  1、MEMORY

    - 使用该存储引擎的出发点是速度。为得到最快的响应时间,采用的逻辑存储介质是系统内存。虽然在内存中存储表数据确实会提供很高的性能,但当mysqld守护进程崩溃时,所有的Memory数据都会丢失。

  2、MERGE

    - MERGE存储引擎是一组MyISAM表的组合,它可以将一组MyISAM进行合并,如果我们需要对这一组表进行操作时,这一引擎便派上用场了,前提是这些MyISAM表结构必须完全相同。

  3、ARCHIVE

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

  

MySQL存储引擎问题的更多相关文章

  1. Mysql存储引擎及选择方法

    0x00 Mysql数据库常用存储引擎 Mysql数据库是一款开源的数据库,支持多种存储引擎的选择,比如目前最常用的存储引擎有:MyISAM,InnoDB,Memory等. MyISAM存储引擎 My ...

  2. Mysql存储引擎比较

    Mysql作为一个开源的免费数据库,在平时项目当中会经常使用到,而在项目当中我们的着重点一般在设计使用数据库上而非mysql本身上,所以在提到mysql的存储引擎时,一般都不曾知道,这里经过网上相关文 ...

  3. MySQL存储引擎之Myisam和Innodb总结性梳理

    Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比   MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名字开始 ...

  4. MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述

    MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...

  5. 【转】mysql存储引擎

    http://www.cnblogs.com/kevingrace/p/5685355.html Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比   MyISAM In ...

  6. Mroonga 3.0.8 发布,MySQL 存储引擎

    Mroonga 3.0.8 支持 REPAIR TABLE 支持损坏的 groonga 数据库. Mroonga 是一个 MySQL 存储引擎,基于 Groonga,提供完整的全文搜索引擎.

  7. Mysql存储引擎之TokuDB以及它的数据结构Fractal tree(分形树)

    在目前的Mysql数据库中,使用最广泛的是innodb存储引擎.innodb确实是个很不错的存储引擎,就连高性能Mysql里都说了,如果不是有什么很特别的要求,innodb就是最好的选择.当然,这偏文 ...

  8. 第 3 章 MySQL 存储引擎简介

    第 3 章 MySQL 存储引擎简介 前言 3.1 MySQL 存储引擎概述 MyISAM 存储引擎是 MySQL 默认的存储引擎,也是目前 MySQL 使用最为广泛的存储引擎之一.他的前身就是我们在 ...

  9. MySQL存储引擎总结

    MySQL存储引擎总结 作者:果冻想 字体:[增加 减小] 类型:转载   这篇文章主要介绍了MySQL存储引擎总结,本文讲解了什么是存储引擎.MyISAM.InnoDB.MEMORY.MERGE等内 ...

  10. Mysql存储引擎__笔记

    Mysql存储引擎(表类型): Mysql数据库: 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以使存储器上一些文件的集合或者一些内存 数据的内存数据的集合. Mysql数据库是开放源代 ...

随机推荐

  1. 使用libvirt技术监控虚拟机资源利用情况

    使用libvirt技术监控虚拟机资源利用情况 (一)计算资源与内存资源的监控 libvirt中提供virDomainGetInfo方法可以将一个domain的计算资源和内存资源的使用情况封装在一个结构 ...

  2. sql server 2008 R2 升级与安装遇到的问题

    因工作需要,遂把以前的2008升级到r2,升级失败,具体原因忘了,卸载2008,清了注册表删了文件,结果安装的时候失败了,如下图: 下一步-有错误日志和错误的序列号,错误日志在C:\Program F ...

  3. sqlserver 拷贝同步多个表数据到另一张表

    --/****** Script for SelectTopNRows command from SSMS ******/ Insert into [DMSBusiness].[dbo].[Busin ...

  4. UVaLive 2965 Jurassic Remains (状态压缩)

    题意:给定 n 个大写字母组成的字符串,选择尽量多的串,使得大写字母都能出现偶数次. 析:由于n比较小,我们可以枚举前n/2的所有组合,然后再从后面查找. 代码如下: #pragma comment( ...

  5. http协议之版本差异(2)

    —————————————HTTP1.0/HTTP1.1—————————————— 建立连接方面 HTTP/1.0 每次请求都需要建立新的TCP连接,连接不能复用.HTTP/1.1 新的请求可以在上 ...

  6. 徒手撸一个 Spring Boot 中的 Starter ,解密自动化配置黑魔法!

    我们使用 Spring Boot,基本上都是沉醉在它 Stater 的方便之中.Starter 为我们带来了众多的自动化配置,有了这些自动化配置,我们可以不费吹灰之力就能搭建一个生产级开发环境,有的小 ...

  7. E20180601-hm

    trade-off n. 权衡; 交易;(不是商业方面的交易,而是“利”与“弊”的权衡) vertex n. 顶点; 最高点; <数>(三角形.圆锥体等与底相对的)顶; (三角形.多边形等 ...

  8. npm切换到淘宝镜像

    1. npm简介 1.1.说明:npm(node package manager)nodejs的包管理器,用于node插件管理(包括安装.卸载.管理依赖等): 1.2.使用npm安装插件:命令提示符执 ...

  9. HDOJ2579,BFS(三维数组标记)

    三维数组对于我这个萌萌的新手来说真是酷酷的,帅到不行,,, 三维数组前面还看到空间的哪一题HDOJ1240,这一题时间上的标记,更酷了!!! 不说废话了,贴一发代码: #include <std ...

  10. 2012 Noip提高组 Day1

    1262. [NOIP2012] Vigenère 密码 ★   输入文件:vigenere.in   输出文件:vigenere.out   简单对比时间限制:1 s   内存限制:128 MB [ ...