1.前言

  本系列记录MYSQL数据库的一些结构和实现特点,方便查询。

2.基本概念

  数据库:物理操作系统文件或者其他形式文件类型的集合。MySQL中数据库文件可以是frm、MYD、MYI、ibd结尾的文件。使用NDB引擎时,可以是内存中的文件。

  实例:MySQL数据库由后台线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。MySQL数据库实例在系统上的表现就是一个进程。

2.2 MySQL体系结构

mysql的数据结构是什么 mysql数据存储结构是什么_运维

  这是MySQL的一个体系结构。可以看出大致分成了四层:

    第一层:处理客户端连接的连接池

    第二层:处理客户端请求的组件,包括:SQL接口,查询分析器,优化组件和缓冲组件。  管理组件和工具组件也在这一层。

    第三层:插件式的存储引擎(注意:存储引擎是基于表的,不是数据库)

    第四层:物理文件系统

3.存储引擎

  插件式的存储引擎好处是可以根据实际需要替换相应的引擎。

3.1 InnoDB存储引擎

  支持事务,行锁设计,支持外键,非锁定读,即默认读取操作不会产生锁。

  数据放在一个逻辑的表空间中,由InnoDB进行管理。MySQL4.1开始,每个表可以单独存放到一个独立的ibd文件中。

  通过多版本并发控制(MVCC)来获得高并发性,并实现了SQL的四种隔离级别,默认REPEATABLE级别。使用next-key locking策略避免幻读。

  提供插入缓冲、二次写、自适应哈希索引、预读等高性能和高可用功能。

  表中的数据存储采取聚集(clustered)的方式,因此每张表的存储都是按主键的顺序进行存放的。如果没有显示的主键,会生成一个6字节的ROWID

3.2 MyISAM存储引擎

  不支持事务,表锁设计,但是支持全文索引,主要面向一些OLAP数据库应用。

  只缓冲索引文件,不缓冲数据文件。

  表由MYD和MYI组成,MYD存放数据文件,MYI存放索引文件,5.0版本之前默认支持表大小是4GB,如果需要支持大于4GB的表,需要定制MAX_ROWS和AVG_ROW_LENGTH属性。5.0版本开始支持256TB单表数据。

3.3 NDB存储引擎

  NDB特点是数据全部放在内存中,因此主键查找的速度极快,并且通过添加NDB数据存储节点可以线性地提供数据库性能,5.1版本开始,可以将非索引的数据放在磁盘上。是高可用、高性能的集群系统。

  注意:连接操作JOIN是在数据库层完成的,而不是存储引擎。这意味着复杂的连接操作需要巨大的网络开销,查询速度慢。

3.4 memory存储引擎

  表数据存在内存中,数据会丢失,适用于存储临时数据的临时表。

  memory存储引擎默认使用哈希索引,而不是B+树索引。

  并发性能差,不支持TEXT和BLOB列类型,存储varchar是按char的方式进行,会浪费内存。

  MySQL使用Memory存储引擎作为临时表来存放查询的中间结果集,如果大于存储引擎的容量设置,又或者中间结果含有TEXT或BLOB列类型字段,会将其转换到MyISAM存储引擎存放到磁盘中。MyISAM数据库不缓存数据文件,因此这时产生的临时表的性能对查询会有损失。

3.5 Archive存储引擎

  这个引擎只支持INSERT和SELECT操作,从5.1版本开始支持索引。使用zlib算法将数据行压缩后存储,比例可以达到1:10。适用于存储归档数据,如日志信息。

  使用行锁来实现高并发的插入操作,非事务安全,设计目标就是提供高速的插入和压缩功能。

3.6 Federated存储引擎

  这个引擎并不存放数据,只是指向一台远程MySQL数据库服务器上的表。类似于SQL Server的链接服务器和Oracle的透明网关,不同在于,目前其只支持MySQL数据库表,不支持异构数据库表。

3.7 Maria存储引擎

  这个是新开发的引擎,目标是用于取代原有的MyISAM存储引擎,成为MySQL的默认存储引擎。

  特点:支持缓存数据和索引文件,应用行锁设计,提供MVCC功能,支持事务和非事务选项,更好的BLOB字符类型的处理性能。

3.8 小结

  MySQL支持全文索引,MyISAM、InnoDB(1.2版本),Sphinx。

  支持事务,InnoDB。ETL操作,MyISAM会有优势,OLTP(在线事务处理)环境,InnoDB更好。

  SHOW ENGINES可以查看mysql支持的存储引擎。

  下表是mysql5.6的主要存储引擎的对比:https://dev.mysql.com/doc/refman/5.6/en/storage-engines.html

Feature

MyISAM

Memory

InnoDB

Archive

NDB

B-tree indexes

Yes

Yes

Yes

No

No

Backup/point-in-time recovery (note 1)

Yes

Yes

Yes

Yes

Yes

Cluster database support

No

No

No

No

Yes

Clustered indexes

No

No

Yes

No

No

Compressed data

Yes (note 2)

No

Yes

Yes

No

Data caches

No

N/A

Yes

No

Yes

Encrypted data(note 3)

Yes

Yes

Yes

Yes

Yes

Foreign key support

No

No

Yes

No

Yes (note 4)

Full-text search indexes

Yes

No

Yes (note 5)

No

No

Geospatial data type support

Yes

No

Yes

Yes

Yes

Geospatial indexing support

Yes

No

Yes (note 6)

No

No

Hash indexes

No

Yes

No (note 7)

No

Yes

Index caches

Yes

N/A

Yes

No

Yes

Locking granularity

Table

Table

Row

Row

Row

MVCC

No

No

Yes

No

No

Replication support (note 1)

Yes

Limited (note 8)

Yes

Yes

Yes

Storage limits

256TB

RAM

64TB

None

384EB

T-tree indexes

No

No

No

No

Yes

Transactions

No

No

Yes

No

Yes

Update statistics for data dictionary

Yes

Yes

Yes

Yes

Yes