Home  >  Article  >  Database  >  MYSQL数据库表的引擎

MYSQL数据库表的引擎

WBOY
WBOYOriginal
2016-06-07 15:03:521150browse

MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能。 下面我们来认识一下MySQL各表存储引擎的特点: InnoDB存储引擎 特点: 1,支持事务,主要面向在线事务处理(OLTP)方面的应用。 2,行锁设计,支持外键

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

下面我们来认识一下MySQL各表存储引擎的特点:

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数据库所支持的存储引擎:

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn