MySQL支持多种存储引擎

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字段类型的处理性能。

时间: 2024-10-26 09:03:03

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

mysql 支持的存储引擎(极简版)

1 innodb (不啰嗦这个了) archive  支持高并发插入和专用缓冲 行级锁 blackhole 可以用复制数据到备库,或者记录到日志.不做任何保存 CSV 不支持索引,很容易结构csv 使用 federated 连接其他mysql的代理 memory 使用场景 用于查找或者映射表 保存数据分析中的中间数据 用于缓存周期性聚合数据的结果 NDB 集群引擎 XtraDB innodb的一个改进版本,主要改进是性能 可测量性 和操作灵活性 PBXT 支持引擎级别的复制 外键约束,并且以一种

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

MySQL之存储引擎 一. 存储引擎概述 定义: 存储引擎是mysql数据库独有的存储数据.为数据建立索引.更新数据.查询数据等技术的实现方法 ? 首先声明一点: 存储引擎这个概念只有MySQL才有. ? 在讲清楚什么是存储引擎之前,我们先来个比喻,我们都知道录制一个视频文件,可以转换成不同的格式,例如mp4,avi,wmv等,而存在我们电脑的磁盘上也会存在于不同类型的文件系统中如windows里常见的ntfs.fat32,存在于linux里常见的ext3,ext4,xfs,但是,给我们或者用户

mysql三:存储引擎

一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件应该有不同的类型:比如存文本用txt类型,存表格用excel,存图片用png等 数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎. 存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型) 在O

mysql几种存储引擎介绍

在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库.而在设计表的时候,我们都会关注一个问题,使用什么存储引擎.等一下,存储引擎?什么是存储引擎? 什么是存储引擎? 关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式.有的表简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取时非常快,但是插入数据时去很差:而我们在实际开发过程中,就可能需要各种各样的表,不同的表,就意味着存储不同类型的数据,

MySQL的多存储引擎架构

支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一.如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解MySQL的核心基础架构.本文将首先介绍MySQL的整体逻辑架构,然后分析MySQL的存储引擎API并介绍如何编写自己的MySQL存储引擎. MySQL逻辑架构 MySQL作为一个大型的网络程序.数据管理系统,架构非常复杂.下图大致画出了其逻辑架构. Connectors MySQL首先是一个网络程序,其在TCP之上定义了自己的应

谈谈MySQL两种存储引擎

Mysql有两种存储引擎:InnoDB与Myisam 二者之间有六大区别:   MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文件的扩 展名为.MYD (MYData).索引文件的扩 展名是.MYI (MYIndex). 基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的 大小只受限于操作系统文件的大小,一般为 2GB 事务处理上方面: MyISAM类

mysql三-1:存储引擎

阅读目录 一 什么是存储引擎 二 mysql支持的存储引擎 三 使用存储引擎 一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用excel,处理图片用png等 数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎. 存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实

Mysql(三)-1:存储引擎

一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用excel,处理图片用png等 数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎. 存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为

mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制

目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发器语法 五.存储过程 六.函数 七.流程控制 八.数据库备份(运维方向) 一.存储引擎 1.什么是存储引擎? mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用exce