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. understand试用笔记一阅读VS2010项目

    一.查看vs2010项目 打开understand,File—New—Project...—Next—Next [向导第三步,选“Import Visual Sudio project files”] ...

  2. ubuntu下非交互式安装MySQL

    $ sudo su -# MYSQL_PASS=nova 设定mysql的密码和nova数据库的密码# cat <<MYSQL_PRESEED | debconf-set-selectio ...

  3. input.php

    <?php /** * */ class Input { function get($index = NULL, $xss_clean = FALSE) { if($index == NULL ...

  4. 关于QT建立项目中遇到的相关问题的处理办法

    关于QT建立项目中遇到的相关问题的处理办法 1.在QTCreater中新建一个空的工程时,第一次运行会抱一个错误,如下: -1: error: LNK1123: 转换到 COFF 期间失败: 文件无效 ...

  5. hdu 2642 Stars 【二维树状数组】

    题目 题目大意:Yifenfei是一个浪漫的人,他喜欢数天上的星星.为了使问题变得更容易,我们假设天空是一个二维平面,上面的星星有时会亮,有时会发暗.最开始,没有明亮的星星在天空中,然后将给出一些信息 ...

  6. Scala_继承

    继承 Scala与Java在继承方面的区别 Scala中的继承与Java有着显著的不同: 重写一个非抽象方法必须使用override修饰符 只有主构造器可以调用超类的主构造器 在子类中重写超类的抽象方 ...

  7. Dinic算法——重述

        赛前赛后算是第三次接触Dinic算法了,每一次接触都能有种很好的感觉,直男的我没法描述~~ 已经比较懂得DInic的基本算法思想了 首先是bfs进行进行分层处理,然后dfs寻找分层后的最大流, ...

  8. SET FOREIGN_KEY_CHECKS=0;在Mysql中取消外键约束

      Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构.   解决方法是在Mysql中取消外键约束:  SET FOREIGN_KEY_CHECKS=0;     然后将原来表的数据导 ...

  9. 敏捷Scrum框架最全总结! [转载]

    [原文链接] 2016-05-03 Sting 敏捷开发作为目前流行的开发方法,为快速迭代提供了足够的理论支持,但敏捷开发方式不应该成为忽略文档和需求分析的过程,注意每个sprint的引入,任务燃烧, ...

  10. nginx-1.12.0版本(编译安装)-自定义安装路径

    nginx-1.12.0版本(编译安装)-自定义安装路径 安装路径:/application/nginx-1.12.0 1.前期准备 安装编译需要的gcc和gcc-c++ yum install -y ...