IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL存储引擎详解 -> 正文阅读

[大数据]MySQL存储引擎详解

书接上文:MySQL的逻辑架构,以及从架构的视角解读一条SQL查询数据在MySQL内部是如何执行的?,本文全面系统的介绍一下MySQL当中的比较重要的存储引擎,以及常见存储引擎的对比。


本文内容 思维导图

在这里插入图片描述


存储引擎简介

存储引擎负责mysql中数据的存储和提取。它的架构模式是插件式的,支持InnoDB、MyISAM等多种存储引擎。从5.5版本后,默认采用InnoDB引擎

存储引擎负责提供API接口给Server层的执行器调用如果对SQL的执行过程不清楚的,可以参考上篇文章
从MySQL架构看一条SQL语句是如何执行的?》
),这些API接口屏蔽了不同存储引擎之间的差异,使得这些差异对Server层的查询过程是透明的。

不同的存储引擎,存储数据的格式一般是不同的甚至有的存储引擎(Memory)都不用磁盘来存储数据,也就是说关闭服务器后表中的数据就消失了。

👉 如何查看mysql支持哪些存储引擎?

通过show engines命令,可以查看mysql支持哪些存储引擎

mysql>show engines;

在这里插入图片描述

列内容示意:
1. Engine:存储引擎名字
2. Support:mysql是否支持,InnoDB是DEFAULT,表示它是默认的存储引擎;
3. Comment:存储引擎的简单介绍
4. Transactions:是否支持事务,只有InnoDB引擎支持事务;
5. XA:是否支持分布式事务,只有InnoDB引擎支持;
6. Savepoins:保存点,用于部分事务的回滚,只有InnoDB引擎支持;

👉 创建表时,如何指定存储引擎?

创建表时,如果没有指定存储引擎,使用默认的存储引擎InnoDB;也可以自己指定存储引擎。

create table 表名(
	建表语句;
) engine = 储存引擎名称;

👉 如何查询表的存储引擎?

通过 show table status like 'table'查看表使用的存储引擎。

mysql>show table status like 'table'

----------------------------------------
| Name(表名)  | Engine(使用的存储引擎) |
| ------------ | --------------------  |
| table_user   | InnoDB                |
----------------------------------------

下面让我们进入正题,学习比较重要的几个存储引擎。通过星号?区分重要程度哦~


???InnoDB引擎:事务型存储引擎

InnoDB是mysql默认的事务型引擎,它支持事务。是一种兼顾高可靠性和高性能的通用存储引擎。在mysql5.5版本以后,默认采用InnoDB引擎;

InnoDB通过使用多版本并发控制,也就是大名鼎鼎的MVCC来支持高并发。并且实现了SQL标准的4种隔离级别,其默认级别是REPEATABLE READ(可重复读)。并且通过间隙锁(next-key locking)策略防止了幻读现象的产生。

事务的四种隔离级别

  1. READ UNCOMMITTED:未提交读
  2. READ COMMITTED:提交读
  3. REPEATABLE READ:可重复读[默认]
  4. SERIALIZABLE:可串行化

除此之外,InnoDB引擎还提供了插入缓冲区(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能。

InnoDB是基于聚簇索引建立的,聚簇索引对主键的查询有很高的性能。但是它的二级索引(secondary index,非主键索引)中必须包含主键列,所以如果主键列很大的话,其他的所有索引都会很大。

👉 InnoDB引擎关键特性

  1. 支持外键
  2. 支持事务,遵循事务的ACID特性。
  3. 行锁:MyISAM是对行加锁,锁粒度相较MyISAM引擎的表锁较细。操作时只锁定某一行,不影响其他行数据,适合高并发的操作。并且通过MVCC可以有效减少加锁操作,支撑高并发
  4. 既缓存索引、又缓存真实数据。(MyISAM只缓存索引,不缓存真实数据)
  5. 高性能特性
    • 插入缓冲区(insert buffer):提高插入效率
    • 两次写(double write):保证InnoDB引擎数据页的可靠性。
    • 自适应哈希索引(adaptive hash index):提高查询效率
  6. 支持索引
    • B树索引、聚簇索引
    • 全文检索索引(MySQL 5.6 及更高版本提供对 FULLTEXT 索引的支持。)
    • 地理空间索引(MySQL 5.7 及更高版本提供对地理空间索引的支持。)等
  7. 🐂NB的 日志支持
    • undo log (回滚日志):主要用于事务回滚和MVCC
    • edo log(重做日志):主要用于掉电等故障恢复

??MyISAM引擎:主要的非事务型存储引擎

在MySQL5.1及以前的版本,MyISAM是默认的存储引擎。MyISAM提供了大量的特性,包括:全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务行级锁,并且有一个毫无疑问的缺陷就是奔溃后无法安全恢复

👉 MyISAM引擎关键特性

  1. 不支持外键
  2. 不支持事务
  3. 表锁:MyISAM是对整张表加锁,锁的粒度比较粗,及时操作一条记录也会锁住整张表,因此并发写入的性能较低。
  4. 统计特性:针对数据的统计有额外的常数来存储。所以count(*)的查询效率很高,时间复杂度是O(1)
  5. 索引特性:对于MyISAM表,即使是BOLB和TEXT等长字段,也可以基于前500个字符创建索引。MyISAM也支持全文索引,是一种基于分词创建的索引,可以支持复杂的查询。
  6. 延迟更新索引键(Delayed Key Write):创建MyISAM表时,如果指定了DELAY_KEY_WRITE选项,每次执行完只会写到内存中的键缓存区,不会立即将修改的索引数据写入磁盘。只有在清理键缓冲区或者关闭表的时候,才会将对应的索引块写入到磁盘。这种方式可以提高写入性能,但是在数据库或者主机崩溃时,会造成索引损坏,需要执行修复操作。
  7. 压缩特性:可以使用myisampack对表进行压缩/打包。压缩表可以极大的减少磁盘空间占用、磁盘IO,从而提升查询性能。

👉 (可能的)应用场景:

  1. 只读、或者读多写少的业务;
  2. 日志型应用:因为延迟更新索引键的特性,MyISAM表插入速度很快。并且可以减少磁盘空间占用、磁盘IO,从而提升查询性能。

注意这里只是原则上可以应用的场景,笔者工作上还没有遇到过MyISAM表,即便是日志存储,通常都是通过Elasticsearch来实现的。


?Memory引擎:内存引擎

Memory存储引擎表结构保存在磁盘上,但是数据保存在内存中,不需要进行磁盘IO,所以它的速度是很快的。但是因为数据保存在内存中,当MYSQL服务器重启后,表数据会丢失。


?InnoDB引擎 🆚 MyISAM引擎

对比项MyISAM引擎InnoDB引擎
默认存储引擎NOYES
外键不支持支持
事务不支持支持
锁粒度表锁行锁,并且通过MVCC可以有效减少加锁操作,提高性能
支持数据异常崩溃后的安全恢复NOYES(redo log日志)
缓存只缓存索引,不缓存真实数据缓存索引,也缓存真实数据
关注点减少磁盘空间占用、减少IO事务、并发写入等

参考资料:

  1. 《高性能MySQL》
  2. 《MySQL技术内幕-InnoDB存储引擎》
  3. 《从根上理解MySQL》

🎉 如果这篇文章对你有帮助,点赞👍 收藏? 关注? 哦,创作不易,感谢!😀
请添加图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:30:00  更:2022-07-17 16:30:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 22:19:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码