我们知道储存引擎是实际实现读取、储存资料的重要东西
所以今天就来针对Innodb(MySQL的预设引擎)来探讨,更深入的了解它的细节,帮助我们未来面对不同的场景,更有概念去解决问题。
Innodb把资料储存在磁碟,所以在server重启的时候,资料依然都在。
要注意的是它会先把资料从磁碟读出放到记忆体,实际上处理资料都是在记忆体这端,处理完再将资料写回磁碟。由於读取磁碟的速度远远慢於读取记忆体的速度,如果Innodb把资料一笔一笔从磁碟读取到记忆体里的话会慢死,因此MySQL设计者将资料划分为许多页的概念,磁碟与记忆体互动的最小单位就是一页,一页的大小一般为16kb,也就是说每次会从磁碟读取一页(16kb)的资料到记忆体,每次也是更新一页(16kb)的资料回磁碟。
前面提到Innodb将资料储存在磁碟中,这些存於磁碟中资料的格式也就是所称的行格式,总共有四种compact、redundant、dynamic、compressed。先稍微知道就好,不用硬记。
可以这样建立compact行格式的table
mysql> create database ryan_demo_db character set utf8mb4 collate utf8mb4_0900_ai_ci;
Query OK, 1 row affected (0.03 sec)
mysql> use ryan_demo_db;
Database changed
mysql> create table ryan_demo_table (c1 varchar(10), c2 varchar(10) not null, c3 char(10), c4 varchar(10)) charset=ascii row_format=compact;
Query OK, 0 rows affected (0.18 sec)
mysql> insert into ryan_demo_table(c1,c2,c3,c4) values ('aaaa','bbb','cc','d'),('eeee','fff',NULL,NULL);
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from ryan_demo_table;
+------+-----+------+------+
| c1 | c2 | c3 | c4 |
+------+-----+------+------+
| aaaa | bbb | cc | d |
| eeee | fff | NULL | NULL |
+------+-----+------+------+
2 rows in set (0.00 sec)
补充说明:
在建立资料库的时候如果不是版本8.0的话,照着我的语法下可能会失败,应是字元集或校对规则名称不同,请自行更新为符合你版本的唷。
先有认知一笔纪录实际上包含2个部分(真实资料及额外资讯)
真实资料大家理解没有问题,但额外资讯有什麽呢?
主要有3个部分
我知道这些虽然是中文字,但根本不知道在说什麽...
来~我们一个一个来看
第一个变长栏位长度列表
首先对资料型态要有基本认知,参考这篇
可知道资料分为储存位元组不固定(可变式)的资料(ex : varchar、text等)及储存位元组固定的资料(ex : int、date等)。因此MySQL针对可变式资料额外增加一个变长栏位长度列表,为的就是纪录实际需要多少位元组来储存。
第二个NULL值列表
新增一笔资料时,有时许多栏位都是NULL值,如果这些值都存在真实资料的位置很占空间,所以设了一个NULL值列表来储存避免浪费。
第三个标头资讯(很重要,在後续如何查询资料上会用得到)
这边是由5个位元组也就是40个位元组成。
全部有以下8种栏位
至於redundant、dynamic、compressed也是类似的概念,由於我感觉还不是特别重要,就不在这多赘述。
由於内容繁多避免消化不良,今日就只介绍Innodb的主要储存行格式,明日在说明重要的资料页结构,了解实际上储存资料的细节。
敬请期待
今天想发ARM的文章时,居然一直遇到这个画面: 虽然不确定是不是被攻击了,但後来还好可以连上主页了,...
大家好,我是西瓜,你现在看到的是 2021 iThome 铁人赛『如何在网页中绘制 3D 场景?从 ...
利用布林值来决定如何继续执行程序进行决策 例 let n = 3; if n > 2 { pr...
汇出 Mutiple Level BOM 如果要制作出下图表格,可以利用原厂的程序码稍微修改 这样就...
JSONDecoder 将抓下来的资讯透过JSONDecoder这个将收集到的资讯进行使用 建立需要...