六、MySQL存储引擎

MySQL体系架构

在这里插入图片描述

连接层

最上层是一些客户端和链接服务,主要完成一些类似于连接处理、认证授权及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限

服务层

第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等

引擎层

存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎

存储层

主要是将数据存储在文件系统上,并完成与存储引擎的交互

存储引擎

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以被称为表类型

# 查看表的存储引擎类型
SHOW CREATE TABLE tablename;

# 创建表时指定存储引擎
CREATE TABLE tablename(
	...
)ENGINE = INNODB;

# 查看当前数据库支持的存储引擎
SHOW ENGINES;

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

InnoDB

介绍:InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是MySQL的默认储存引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择

特点:

  1. DML操作遵循ACID模型,支持事务
  2. 行级锁,提高并发访问性能
  3. 支持外键FOREIGN KEY约束,保证数据的完整性和正确性

文件:

tablename.idb: tablename是表名,innodb引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引

8版本之后,frm放到了sdi中,而sdi又放在了ibd中。所以仅有一个.ibd文件

使用 ibd2sdi tablename.ibd命令查看内容

逻辑存储结构

  1. TableSpece: 表空间
  2. Segment: 段
  3. Extent: 区 1M
  4. Page: 页 16k
  5. Row: 行

表空间有多个段、一个段有多个区、一个区有多个页、一页有多个行,行里面就是一个一个的字段

MyISAM

介绍:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的

特点:

  1. 不支持事务,不支持外键
  2. 支持表锁,不支持行锁
  3. 访问速度快

保存文件结构

  1. tablename.MYD:存储数据

  2. tablename.MYI:存储索引

  3. tablename.sdi:表结构的信息,json格式的数据,可以直接打开

Memory

介绍:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。Memory的权限就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性

存在内存中的数据,内存只要断点或者什么就会没了,没有持久化。一般作为临时表,做缓存使用,因为是内存所以访问快

特点:

  1. 内存存放
  2. hash索引(默认)
  3. 只有tablename.sdi,因为数据都是存在内存中的

Engines的区别

特点InnoDBMyISAMMemory
存储限制64TB
事务安全支持--
锁机制行锁表锁表锁
B+Tree索引支持支持支持
Hash索引--支持
全文索引支持(5.6之后)支持-
空间使用
内存使用中等
批量插入速度
支持外键支持--
引擎类型特点代替
InnoDB(数据严格性)支持事务、外键、行级锁/
MyISAM(数据可松散)不支持事务、外键、行级锁,仅有表级锁,访问速度快MongoDB
Memory(内存中的)访问快Redis
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值