MySQL笔记(1)---MySQL体系结构和存储引擎
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体系结构和存储引擎的更多相关文章
- MySQL技术内幕读书笔记(一)——Mysql体系结构和存储引擎
目录 MySQL体系结构和存储引擎 定义数据库和实例 MYSQL体系结构 MYSQL存储引擎 MySQL体系结构和存储引擎 定义数据库和实例 数据库:物理操作系统文件或者其他形式文件类型的结合.在MY ...
- MySQL体系结构和存储引擎概述
MySQL体系结构和存储引擎概述 一.定义数据库和实例 数据库: 物理操作系统文件或其他形式文件类型的集合.数据库文件可以是frm.MYD.ibd 结尾的文件. 从概念上来说,数据库是文件的集合,是 ...
- 详解mysql体系结构和存储引擎
概述 之前整理的一些mysql方面内容,适合做备忘,因为我基本不会去记这些概念性的东西,大家做个了解就可以了. 一.定义数据库和实例 1.数据库: 物理操作系统文件或其他形式文件类型的集合. 在MyS ...
- MySQL体系结构与存储引擎
MySQL 体系结构 先看 MySQL 数据库的体系结构,如下图所示. MySQL 体系结构由 Client Connectors 层.MySQL Server 层及存储引擎层组成. Client C ...
- MySQL 体系结构及存储引擎
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...
- MySQL - 常见的三种数据库存储引擎
原文:MySQL - 常见的三种数据库存储引擎 数据库存储引擎:是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧. ...
- 【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% ...
- MySQL 体系结构和存储引擎
数据库: 物理操作系统文件或其他形式文件类型的集合 实例: MySQL数据库向后台线程以及一个共享内存区组成,共享内存可以被运行的后台线程所共享 MySQL 数据库实例在某统上的表现就是一个进程. M ...
- 【MySQL】(一)MySQL 体系结构和存储引擎
1.1.定义数据库和实例 数据库:物理操作系统文件或其他形式文件类型的集合.在MySQL数据库中,数据库文件可以是frm.MYD.MYI.ibd结尾的文件. 实例:MySQL数据库由后台线程以及一个共 ...
随机推荐
- s5-11 距离矢量路由选择协议
距离矢量路由选择(Distance Vector:DV) 每个路由器维护一张表,表中列出了当前已知的到每个目标 的最佳距离,以及为了到达那个目标,应该从哪个接口转发. 距离矢量路由选择(Distanc ...
- Andrew机器学习第一课
批梯度下降算法: 训练样本为一个时:更新Θi 让代价函数最小,利用沿梯度下降方向函数会变得越来越小.这个函数是代价函数J关于(Θi )的.这里并没有在讨论x,y. 关于为什么式子(图是复制的 ...
- OpenGL中的渐变颜色绘图(应力可视化)
#include <GL/glut.h> #include <iostream> #include <cmath> using namespace std; ; ; ...
- 《mysql必知必会》学习_第四章_20180724_欢
P27: select prod_name from products; # select 列 from 表 # 从表products 中检索 名为 prod_name 的列 P28 多个语句一起必须 ...
- 种类并查集——带权并查集——POJ1182;HDU3038
POJ1182 HDU3038 这两个题比较像(一类题目),属于带权(种类)并查集 poj1182描绘得三种动物种类的关系,按照他一开始给你的关系,优化你的种类关系网络,最后看看再优化的过程中有几处矛 ...
- 关于Servlet中GET和POST方法的总结
JSP.Servlet中get请求和post请求的区别总结 在学习JavaWeb最初的开始阶段,大家都会遇到HttpServlet中的doGet和doPost方法.关于Servlet中get请求和 ...
- Linux vmstat
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.IO读写.CPU活动等进行监视.它是对系统的整体情况进行统计,不足之处是无法对某 ...
- c# List使用中遇到的问题
最近在项目上写的方法,想通过减少访问数据层,将需要重复调用的值存入List,无意中碰到的一个巨坑,至今仍不明所以,在此写出来,一来是看看有没有同道中人,二来是看看有没有大牛能解惑. 逻辑如下: 1.从 ...
- 4.翻译:EF基础系列--EF架构
原文地址:http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx 下面的图形,展示了EF的总体架构: 让我们来 ...
- python--partial偏函数
new_func = partial(函数名,参数), 生成一个新的函数, 新的函数中参数是partial固定时的参数 例1: from functools import partial def f ...