MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能。

MySQL有多种存储引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。
MySQL支持数个存储引擎作为对不同表的类型的处理器。MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎:
MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非你配置MySQL默认使用另外一个引擎。
MEMORY存储引擎提供“内存中”表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。就像MyISAM一样,MEMORY和MERGE存储引擎处理非事务表,
这两个引擎也都被默认包含在MySQL中。
注释:MEMORY存储引擎正式地被确定为HEAP引擎。
InnoDB和BDB存储引擎提供事务安全表。BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分发版里。InnoDB也默认被包括在所 有MySQL 5.1二进制分发版里,
你可以按照喜好通过配置MySQL来允许或禁止任一引擎。
EXAMPLE存储引擎是一个“存根”引擎,它不做什么。你可以用这个引擎创建表,但没有数据被存储于其中或从其中检索。这个引擎的目的是服务,在 MySQL源代码中的一个例子,
它演示说明如何开始编写新存储引擎。同样,它的主要兴趣是对开发者。
NDB Cluster是被MySQL Cluster用来实现分割到多台计算机上的表的存储引擎。它在MySQL-Max 5.1二进制分发版里提供。
这个存储引擎当前只被Linux, Solaris, 和Mac OS X 支持。在未来的MySQL分发版中,我们想要添加其它平台对这个引擎的支持,包括Windows。
ARCHIVE存储引擎被用来无索引地,非常小地覆盖存储的大量数据。 CSV存储引擎把数据以逗号分隔的格式存储在文本文件中。
BLACKHOLE存储引擎接受但不存储数据,并且检索总是返回一个空集。
FEDERATED存储引擎把数据存在远程数据库中。在MySQL 5.1中,它只和MySQL一起工作,使用MySQL C Client API。在未来的分发版中,
我们想要让它使用其它驱动器或客户端连接方法连接到另外的数据源。
当你创建一个新表的时候,你可以通过添加一个ENGINE 或TYPE 选项到CREATE TABLE语句来告诉MySQL你要创建什么类型的表:
 CREATE TABLE t (i INT) ENGINE = INNODB;

CREATE TABLE t (i INT) TYPE = MEMORY; 
虽然TYPE仍然在MySQL 5.1中被支持,现在ENGINE是首选的术语。 如何选择最适合你的存储引擎呢?

InnoDB存储引擎
特点:
1,支持事务,主要面向在线事务处理(OLTP)方面的应用。
2,行锁设计,支持外键,并支持orcle的非锁定读,即默认情况下读取操作不加锁。
3,第三方存储引擎,被orcle收购。
4,windows版本默认存储引擎,其他系统mysql默认存储引擎为MyISAM。
设计理念:
1,InnoDB默认将数据放到一个逻辑的表空间中,这个表空间就像黑盒子一样由InnoDB自身进行管理。从mysql4.1开始,它可以将每个 InnoDB存储引擎的表单独存放到一个独立的ibd文件中。
与orcle类似,InnoDB存储引擎同样可以使用裸设备(row disk)来建立其表空间。
2,InnoDB通过使用多版本并发控制(MVCC)来获取高并发性,并且实现了sql标准的4种隔离级别,默认为REPEATABLE级别。
同时 使用一种next-key-locking的策略来避免幻读(phantom)。除此之外,InnoDB存储引擎还提供插入缓存(insert buffer),
二次写(double write),自适应哈希索引(adaptive hash index),预读(read ahead)等高性能和高可用的功能。
MyISAM存储引擎
特点:
1,不支持事务,表锁(表级锁,加锁会锁住整个表),支持全文索引,对于一些OLAP(online analytical processing,在线分析处理)操作速度快
2,官方存储引擎,除windows版本外,是所有mysql版本的默认存储引擎。
设计理念:
1,myisam存储引擎表由myd和myi组成。myd用来存放数据文件,myi用来存放索引文件,可以通过myisampack工具进一步压缩 数据文件,因为该工具使用huffman编码静态算法来压缩数据。
因此,使用该工具压缩后的表是只读的,当然也可以通过myisampack来解压数据文 件。
2,mysql5.0之前,myisam默认支持的表大小为4g,如果需要支持大于4g的myisam表时,则需要制定Max_Rows和AVG_ROW_LENGTH属性。
从mysql5.0版本开始,myisam默认支持256T的单表数据,足够满足一般应用的需求。
3,对于myisam存储引擎表,mysql数据库只缓存其索引文件,数据文件的缓存由操作系统本身来完成。这与其他使用LRU算法缓存数据的大部分数据库大不相同。
此外,在mysql5.1.23版本之前,无论是在32b或64b的操作系统环境中,缓存索引的缓存区最大只能设置为4g,在之后的版 本中,64位系统可以支持大于4g的索引缓存区。
NDB存储引擎
NDB存储引擎是一个集群存储引擎,类似于orcle的rac集群,不过与rac share everything结构不同的是,其结构是share nothing的集群结构,因此能提供更高级别的高可用性。
特点:
1,数据全部放在内存中,从5.1版本开始,可以将非索引数据放在磁盘上,因此主键查找的速度极快,并且通过添加ndb数据存储引擎节点(Data Node)可以线性地提高数据库性能,
是高可用,高性能的集群系统。
2,ndb存储引擎的连接操作(join)是在mysql数据库层完成的,而不是在存储引擎层完成的,这意味着复杂的连接操作需要巨大的网络开销,因此,查询速度很慢,这是ndb的瓶颈。
Memory存储引擎
memory存储引擎(之前称为heap存储引擎)将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都会消失。它非常适合用于存放临时数据的临时表,以及数据仓库的纬度表,默认使用哈希索引,而不是b+树索引。
使用限制:memory存储引擎只支持表锁,并发性能较差,并且不支持text和blob列类型。最重要的是,存放变长字段(varchar)时, 按照定常字段的方式进行存放,造成内存浪费。
此外,mysql数据库使用临时表存放查询的中间结果集(intermediate result)。如果中间结果集大于memory存储引擎表的容量设置,或中间结果集含有text或blob字段,则mysql数据库会把其转换到 myisam存储引擎表而存放到磁盘。
由于myisam不缓存数据文件,因此这时产生的临时表的性能对于查询会有损失。
Archive存储引擎
特点:
1,archive存储引擎只支持insert和select操作,mysql5.1开始支持索引。使用zlib算法将数据行进行压缩后存储,压缩比率一般可达1:10
2,archive存储引擎非常适用于存储归档数据,如日志信息。
3,archive存储引擎使用行锁来实现高并发的插入操作。由于本身不是事务安全的存储引擎,其设计目标主要是提供高速的插入和压缩功能。
Maria存储引擎
maria存储引擎是新开发的引擎,设计目标主要是用来取代原有的myisam存储引擎,从而成为mysql的默认存储引擎。
特点:
1,缓存数据和索引文件,行锁设计,提供mvcc功能,支持事务和非事务安全的选项支持,及更好的blob字段类型的处理性能。

MySQL支持多种存储引擎的更多相关文章

  1. mysql中有多种存储引擎,每种引擎都有自己的特色

    mysql中有多种存储引擎,每种引擎都有自己的特色. 用途: MyISAM:快读, Memory:内存数据, InnoDB:完整的事务支持 锁: MyISAM:全表锁定, Memory:全表锁定, I ...

  2. 查看mysql支持的存储引擎

    查看mysql支持的存储引擎 show engines\G;

  3. mysql支持的存储引擎

    1.InnoDB 存储引擎 支持事务,其设计目标主要面向联机事务处理(OLTP)的应用.其特点是行锁设计.支持外键,并支持类似 Oracle 的非锁定读,即默认读取操作不会产生锁. 从 MySQL 5 ...

  4. 百万年薪python之路 -- MySQL数据库之 存储引擎

    MySQL之存储引擎 一. 存储引擎概述 定义: 存储引擎是mysql数据库独有的存储数据.为数据建立索引.更新数据.查询数据等技术的实现方法 ​ 首先声明一点: 存储引擎这个概念只有MySQL才有. ...

  5. MySQL的多存储引擎架构

    支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一.如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解MySQL的核心基础架构.本文将 ...

  6. Mysql表类型(存储引擎)的比较

    面试官问:你知道mysql有哪些存储引擎,区别是啥? 我:一脸闷逼,于是乎下来补一补,以作备查 1.和大多数数据库不同,MySQL 中有一个存储引擎的概念,针对不同的存储需求可以选择最优的存储引擎. ...

  7. (转)MySQL 常用数据存储引擎区别

    MySQL 常用数据存储引擎区别 原文:https://laravel-china.org/articles/4198/mysql-common-data-storage-engine mysql有多 ...

  8. MySql的多存储引擎架构, 默认的引擎InnoDB与 MYISAM的区别(滴滴)

    1.存储引擎是什么? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术, ...

  9. mysql三-1:存储引擎

    一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型 ...

随机推荐

  1. Ubunut 13.04下配置memcached、 python MySQLDB,python-memcache模块等

    一开始系统使用的是163的源,没有安装成功memcached,换了cn99的也不行,后来换了台湾的源,以下步骤才得以顺利进行. 更换源的方法可以参看我以前的帖子. 安装memached:sudo ap ...

  2. 在virtualbox上安装mac os mavericks遇到Missing Bluetooth Controller Transport问题解决办法

    挂载 HackBoot_Mav.iso 作为光驱,启动在 磁盘选择 界面,选择磁盘后按空格键,输入 启动参数 -v -x(-x的意思是安全模式,不这样的话,有蓝牙驱动作怪, 会输出 [IOBlueto ...

  3. Android实例-如何使用系统剪切板(XE8+小米2)

    结果: 发现个问题,就是粘贴时会清除之前的信息. unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, S ...

  4. hdoj 5194 DZY Loves Balls【规律&&gcd】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5194 题意:给你n个黑球,m个白球,每次从中随机抽取一个,如果抽到黑球记为1如果抽出来白球记为0,让你 ...

  5. Modbus Poll :Byte Missing Error或CRC Error

    原因: 1.通信线路受干扰或是路线接触不良:    用显示器测量物理电平信号   2.从机工作不正常: 检测电源不正常或查程序bug   3.PC主机串口不正常: PC串口2.3脚答短接用串口调试器测 ...

  6. 如何计算ModBus超时时间?

    波特率:每秒钟通过信道传输的信息量称为位传输速率,也就是每秒钟传送的二进制位数,简称比特率.比特率表示有效数据的传输速率,用b/s .bit/s.比特/秒,读作:比特每秒. 如9600b/s:指总线上 ...

  7. JavaScript要点(九)HTML DOM

    通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素. HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object M ...

  8. Android Studio怎么删除项目

    本 新手最近学Android都是用的eclipse.其实个人觉得eclipse不错,可能接触Android不久,倒也不觉得它慢还是怎样.对于 Google的Android studio也是早有耳闻,前 ...

  9. 【转】来自《轻松scrum之旅》的敏捷开发总结

    敏捷开发的核心价值观是,软件开发最重要的是给用户提供有价值的.可以工作的软件.如何保证提供有价值的软件,是通过反馈机制来完成的.这一点,我们体会很深.自从采用敏捷开发以后,我们比以前更有意识地希望得到 ...

  10. Asp.Net Mvc5 之Controller

    经过前面介绍了路由系统之后,我们知道任何一个请求在经过asp.net url路由系统的拦截之后,会生成以controller/action 名称为核心的路由数据.asp.net mvc 根据此解析出目 ...