1.前言

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

2.基本概念

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

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

2.2 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

MySQL笔记(1)---MySQL体系结构和存储引擎的更多相关文章

  1. MySQL技术内幕读书笔记(一)——Mysql体系结构和存储引擎

    目录 MySQL体系结构和存储引擎 定义数据库和实例 MYSQL体系结构 MYSQL存储引擎 MySQL体系结构和存储引擎 定义数据库和实例 数据库:物理操作系统文件或者其他形式文件类型的结合.在MY ...

  2. MySQL体系结构和存储引擎概述

     MySQL体系结构和存储引擎概述 一.定义数据库和实例 数据库: 物理操作系统文件或其他形式文件类型的集合.数据库文件可以是frm.MYD.ibd 结尾的文件. 从概念上来说,数据库是文件的集合,是 ...

  3. 详解mysql体系结构和存储引擎

    概述 之前整理的一些mysql方面内容,适合做备忘,因为我基本不会去记这些概念性的东西,大家做个了解就可以了. 一.定义数据库和实例 1.数据库: 物理操作系统文件或其他形式文件类型的集合. 在MyS ...

  4. MySQL体系结构与存储引擎

    MySQL 体系结构 先看 MySQL 数据库的体系结构,如下图所示. MySQL 体系结构由 Client Connectors 层.MySQL Server 层及存储引擎层组成. Client C ...

  5. MySQL 体系结构及存储引擎

    MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...

  6. MySQL - 常见的三种数据库存储引擎

    原文:MySQL - 常见的三种数据库存储引擎 数据库存储引擎:是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧. ...

  7. 【MySQL笔记】mysql报错"ERROR 1206 (HY000): The total number of locks exceeds the lock table size"的解决方法

    step1:查看 1.1 Mysql命令行里输入"show engines:"查看innoddb数据引擎状态, 1.2 show variables "%_buffer% ...

  8. MySQL 体系结构和存储引擎

    数据库: 物理操作系统文件或其他形式文件类型的集合 实例: MySQL数据库向后台线程以及一个共享内存区组成,共享内存可以被运行的后台线程所共享 MySQL 数据库实例在某统上的表现就是一个进程. M ...

  9. 【MySQL】(一)MySQL 体系结构和存储引擎

    1.1.定义数据库和实例 数据库:物理操作系统文件或其他形式文件类型的集合.在MySQL数据库中,数据库文件可以是frm.MYD.MYI.ibd结尾的文件. 实例:MySQL数据库由后台线程以及一个共 ...

随机推荐

  1. DocumentFragment类型

    nodeType 11 nodeName #document-fragment nodeValue NULL parentNode null createdocumentfragment()方法创建了 ...

  2. js, javascript 图片懒加载 实例代码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. DDR中常用概念

    一.DDR中的基本术语 (2)逻辑Bank SDRAM的内部是一个存储阵列,类似于一张表格.和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),就可以准确地找到所需要的单元格, ...

  4. Nodejs入门【转载】保留备用

    关于 本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识.本书绝不是一本“Hello World”的教程. 状态 你正在阅读的已经是本书的最终版. ...

  5. Servlet Life Cycle

    Servlet Life Cycle http://docs.oracle.com/javaee/5/tutorial/doc/bnafi.html Servlet Filters and Event ...

  6. npp 文本编辑器 开源

    下载地址 https://notepad-plus-plus.org/download/v6.8.4.html

  7. HDOJ1024--Max Sum Plus Plus(动态规划)UnSolved

    Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To be a brave ACMer, we ...

  8. java锁类型

    转载链接在每个锁类型后边 线程锁类型 1.自旋锁 ,自旋,jvm默认是10次吧,有jvm自己控制.for去争取锁 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchroni ...

  9. PAT甲级 1127. ZigZagging on a Tree (30)

    1127. ZigZagging on a Tree (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  10. 第84讲:Scala中List和ListBuffer设计实现思考

    今天来学习了scala中的list和ListBuffer scala list 内部很多操作是listbuffer做的,因为改变元素,listbuffer非常高效,tl是var类型的  ,但是他属于s ...