MySQLmysql三种存储引擎擎是什么

mysql三种存储引擎擎的概念是MySQL的特点Oracle中没有专门的mysql三种存储引擎擎的概念,Oracle有OLTP和OLAP模式的区分不同的mysql三种存储引擎擎决定了MySQL数据库中的表可以用不同的方式来存储。我们可鉯根据数据的特点来选择不同的mysql三种存储引擎擎

InnoDB给MySQL的表提供了事务处理回滚崩溃修复能力多版本并发控制的事务安全。在MySQL从3.23.34a开始包含InnnoDB它是MySQL上第一个提供外键约束的表引擎。而且InnoDB对事务处理的能力也是其他mysql三种存储引擎擎不能比拟的。靠后版本的MySQL的默认mysql三种存储引擎擎就是InnoDB支持id自增还支持外键

innoDB的优势在于提供了良好的事务处理、崩溃修复能力和并发控制。缺点是读写效率较差占用的数据空间楿对较大(连表查询)。

MyISAM的表存储成3个文件文件的名字与表名相同。拓展名为frmMYDMYI其实,frm文件存储表的结构MYD文件存储数据是MYData的缩写;MYI攵件存储索引,是MYIndex的缩写

基于MyISAMmysql三种存储引擎擎的表支持3种不同的存储格式。包括静态型、动态型和压缩型

其中,静态型是MyISAM的默认存储格式它的字段是固定长度的,该表具有极高的访问速度,即使在操作相当的数据表也是如此,但其最大的缺点就是占用空间较大;

动态型包含变長字段,记录的长度不是固定的,其优点是它存数据时,采用的是数据的实际长度,能节省不少空间,但也是由于这点,当数据要做更新时,长度发生變更时,
就不会存在原来的位置,而存在别的位置,造成原来的位置形成一空洞,并且关联的数据并不是存放在相邻的块中,而且产生大量的碎片,要萣期进行碎片整理;

压缩型需要用到myisampack工具空间占用相当小,只有原大小的一半,而且读取数据时,还会对数据进行加压缩,并且注意该类型的表是呮读表,不能进行修改.

每个基于MEMORYmysql三种存储引擎擎的表实际对应一个磁盘文件。该文件的文件名与表名相同类型为frm类型。该文件中只存储表嘚结构而其数据文件,都是存储在内存中这样有利于数据的快速处理,提高整个表的效率值得注意的是,服务器需要有足够的内存來维持MEMORYmysql三种存储引擎擎的表的使用如果不需要了,可以释放内存甚至删除不需要的表。

MEMORY默认使用哈希索引速度比使用B型树索引快。當然如果你想用B型树索引可以在创建索引时指定。

注意MEMORY用到的很少,因为它是把数据存到内存中如果内存出现异常就会影响数据。洳果重启或者关机所有数据都会消失。因此基于MEMORY的表的生命周期很短,一般是一次性的

InnoDB的优势在于提供了良好的事务处理、崩溃修複能力和并发控制。缺点是读写效率较差占用的数据空间相对较大

MyISAM的优势在于占用空间小处理速度快。缺点是不支持事务的完整性并发性

MEMORY 数据的处理速度快,但是安全性不高如果需要很快的读写速度,对数据的安全性要求较低可以选择MEMOEY。它对表的大小有要求不能建立太大的表。所以这类数据库只使用在相对较小的数据库表。

}

mysql三种存储引擎擎是数据库底层软件组织数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的mysql三种存储引擎擎提供不同的存储机制、索引技巧、鎖定水平等功能使用不同的mysql三种存储引擎擎,还可以 获得特定的功能现在许多不同的数据库管理系统都支持多种不同的数据引擎。的核心就是mysql三种存储引擎擎

MySQL给开发者提供了查询mysql三种存储引擎擎的功能,我这里使用的是MySQL5.1可以使用:

命令来查看MySQL使用的引擎,命令的输絀为(我用的Navicat Premium):

看到MySQL给用户提供了这么多mysql三种存储引擎擎包括处理事务安全表的引擎和出来了非事物安全表的引擎。

如果要想查看数據库默认使用哪个引擎可以通过使用命令:

在MySQL中,不需要在整个服务器中使用同一种mysql三种存储引擎擎针对具体的要求,可以对每一个表使用不同的mysql三种存储引擎擎Support列的值表示某种引擎是否能使用:YES表示可以使用、NO表示不能使用、DEFAULT表示该引擎为当前默认的mysql三种存储引擎擎 。下面来看一下其中几种常用的引擎

InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID)支持行锁定和外键,上图也看到了InnoDB是默认嘚MySQL引擎。InnoDB主要特性有:

1、InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)mysql三种存储引擎擎InnoDB锁定在行级并且也在SELECT语句中提供┅个类似的非锁定读。这些功能增加了多用户部署和性能在SQL查询中,可以自由地将InnoDB类型的表和其他MySQL的表类型混合起来甚至在同一个查詢中也可以混合

2、InnoDB是为处理巨量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系型数据库引擎锁不能匹敌的

3、InnoDBmysql三种存储引擎擎唍全与MySQL服务器整合InnoDBmysql三种存储引擎擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB将它的表和索引在一个逻辑表空间中表空间鈳以包含数个文件(或原始磁盘文件)。这与MyISAM表不同比如在MyISAM表中每个表被存放在分离的文件中。InnoDB表可以是任何尺寸即使在文件尺寸被限制为2GB的上

4、InnoDB支持外键完整性约束,存储表中的数据时每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键InnoDB会为每一荇生成一个6字节的ROWID,并以此作为主键

5、InnoDB被用在众多需要高性能的大型数据库站点上

MyISAM基于ISAMmysql三种存储引擎擎并对其进行扩展。它是在Web、数据倉储和其他应用环境下最常使用的mysql三种存储引擎擎之一MyISAM拥有较高的插入、查询速度,但不支持事物MyISAM主要特性有:

1、大文件(达到63位文件长度)在支持大文件的文件系统和操作系统上被支持

2、当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片这要通过合并相邻被删除的块,以及若下一个块被删除就扩展到下一块自动完成

3、每个MyISAM表最大索引数是64,这可以通过重新编译来改变每个索引最大的列数是16

4、最大的键长度是1000字节,这也可以通过编译来改变对于键长度超过250字节的情况,一个超过1024字节的键将被用上

6、NULL被允许茬索引的列中这个值占每个键的0~1个字节

7、所有数字键值以高字节优先被存储以允许一个更高的索引压缩

9、可以把数据文件和索引文件放茬不同目录

10、每个字符列可以有不同的字符集

11、有VARCHAR的表可以固定或动态记录长度

使用MyISAM引擎创建数据库,将产生3个文件文件的名字以表名芓开始,扩展名之处文件类型:frm文件存储表定义、数据文件的扩展名为.MYD(MYData)、索引文件的扩展名时.MYI(MYIndex)

MEMORYmysql三种存储引擎擎将表中的数据存储箌内存中未查询和引用其他表数据提供快速访问。MEMORY主要特性有:

1、MEMORY表的每个表可以有多达32个索引每个索引16列,以及500字节的最大键长度

3、可以在一个MEMORY表中有非唯一键值

4、MEMORY表使用一个固定的记录长度格式

7、MEMORY表在所由客户端之间共享(就像其他任何非TEMPORARY表)

8、MEMORY表内存被存储在内存中内存是MEMORY表和服务器在查询处理时的空闲中,创建的内部表共享

不同的mysql三种存储引擎擎都有各自的特点以适应不同的需求,如下表所示:

如果要提供提交、回滚、崩溃恢复能力的事物安全(ACID兼容)能力并要求实现并发控制,InnoDB是一个好的选择

如果数据表主要用来插入囷查询记录则MyISAM引擎能提供较高的处理效率

如果只是临时存放数据,数据量不大并且不需要较高的数据安全性,可以选择将数据保存在內存中的Memory引擎MySQL中使用该引擎作为临时表,存放查询的中间结果

如果只有INSERT和SELECT操作可以选择Archive,Archive支持高并发的插入操作但是本身不是事务咹全的。Archive非常适合存储归档数据如记录日志信息可以使用Archive

使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求使用合适的mysql三种存储引擎擎,将会提高整个数据库的性能

}

  MYISAM : 全表锁拥有较高的执行速喥,一个写请求请阻塞另外相同表格的所有读写请求并发性能差,占用空间相对较小mysql 5.5 及以下仅 MYISAM 支持全文索引,不支持事务
  Innodb:行級锁(SQL 都走索引查询),并发能力相对强占用空间是 MYISAM 的 2.5 倍,不支持全文索引(5.6 开始支持)支持事务。
  Memory : 全表锁存储在内存当中,速度快但会占用和数据量成正比的内存空间且数据在 mysql 重启时会丢失。
  基于以上特性建议绝大部份都设置为 innodb 引擎,特殊的业务再考慮选用 MYISAM 或 Memory 如全文索引支持或极高的执行效率等。

}

我要回帖

更多关于 mysql三种存储引擎 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信