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数据库由后台线程以及一个共 ...
随机推荐
- IntelliJ IDEA 2017版 编译器使用学习笔记(十) (图文详尽版);IDE快捷键使用;IDE关联一切
关联一切 一.与spring关联 通过图标跳转相关联的类 设置关联:进入project structure ===>facets =>选加号,===>选spring,默认添 ...
- 学以致用十一-----centos7.2+python3+YouCompleteMe走过的坑
目的,安装YouCompleteMe 插件 参考的资料 https://blog.csdn.net/zs376957686/article/details/77833953 https://www.c ...
- Java四种排序:冒泡,选择,插入,二分(折半插入)
四种排序:冒泡,选择,插入,二分(折半插入) public class Test{ // public static void main(String[] args) { // Test t=new ...
- Struts2--HelloWord
Struts2官网 官网指南 官网下载Struts2.5-min-lib.zip解压把lib目录下jar包拷贝到web项目lib目录下 配置web.xml文件 <filter> <f ...
- 正则表达式Regular expressions
根据某种匹配模式来寻找strings中的某些单词 举例:如果我们想要找到字符串The dog chased the cat中单词 the,我们可以使用下面的正则表达式: /the/gi 我们可以把这个 ...
- Magic Powder - 2 (CF 670_D)
http://codeforces.com/problemset/problem/670/D2 The term of this problem is the same as the previous ...
- libtool 创建库的工具
libtool 创建库的工具 1. 背景 在不同的系统中建立动态链接库的方法有很大的差别,这主要是因为每个系统对动态链接库的用法和实现并不相同,以及编译器对动态链接库支持的选项也不太一样. 对于开发人 ...
- openresty + lua 3、openresty http 调用
http 的话,openresty 已经集成,ng 的话,自己引入即可. github 地址:https://github.com/pintsized/lua-resty-http github 里提 ...
- HDU2732一个让我debug了一晚上的题目
思路都理解了,清晰了,就是代码不对,还是有些小地方自己注意不到,即使就在你的眼前也不易发现的那种 Description: 也是一个最大流的构图,没相出来,或者说想简单了也是标记点1 至 n * m是 ...
- CUDA cufftPlanMany的用法_31通道32*8像素的FFT
#include <cufft.h> #include <iostream> #include <cuda_runtime.h> #include <help ...