Mysql------InnoDB存储引擎、行格式

InnoDB存储引擎

CREATE TABLE t1(
a int PRIMARY KEY,
b int,
c int,
d int,
e VARCHAR(20)
) ENGINE = INNODB;

INSERT INTO t1 VALUES(4,3,1,1,‘d’);
INSERT INTO t1 VALUES(1,1,1,1,‘a’);
INSERT INTO t1 VALUES(8,8,8,8,‘h’);
INSERT INTO t1 VALUES(2,2,2,2,‘b’);
INSERT INTO t1 VALUES(5,2,3,5,‘e’);
INSERT INTO t1 VALUES(3,3,2,2,‘c’);
INSERT INTO t1 VALUES(7,4,5,5,‘g’);
INSERT INTO t1 VALUES(6,6,4,4,‘f’);

select * from t1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dbRr2x59-1598592502474)(C:\Users\hunktimes\Desktop\MySQL\1)]

select * from t1 where a > 1;

执行完insert后,数据都是存在于磁盘中,按照条件查询的时候,
我们也是从磁盘中拿到数据放到内存中,然后再比较,

如果,有千万级别的数据,我们也要一条一条的这样拿吗?

在InnoDB中,数据会存储到磁盘上面,当处理数据的时候,会把数据从磁盘加载到内存中,
表中读取某些记录时候,InnoDB存储引擎不需要一条一条的去读取。

InnoDB存储引擎存值的方式:

​ 将数据划分为若干个页,页为单位作为磁盘和内存交互得到基本单位,InnoDB中页的大小一般为 16 KB。

​ 也就是说,当需要从磁盘中读数据时每一次最少将从磁盘中读取16KB的内容到内存中,每一次最少也会把内 存中的16KB内容写到磁盘中。

Compact行格式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HISwzifV-1598592502480)(C:\Users\hunktimes\Desktop\MySQL\2)]

记录的真实数据

​ 就是我们insert语句的数据。sql中有几列,后面的 橘黄色的就有几列。

NULL值列表

​ 比如说,我们在insert的时候,例如,我上面的t1表

​ INSERT INTO t1 VALUES(3,’’,’’,’’,‘c’); 可以在底层存储为 3c 剩下的null 就在这个 NULL值列表记录一下。

变长字段长度列表

e VARCHAR(20) 存的是e这个字段的真实长度,这个里面存的额就是20

如果再来一个字段f f VARCHAR(20) 这个里面存的就是这两个20

行溢出

CREATE TABLE varchar_size_demo(
c VARCHAR(65535)
) CHARSET=ascii ROW_FORMAT=Compact;

执行这个SQL报错:

Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。

这个报错信息很明确了,(如果不是BLOBS)行最大值为 65535。

看看这个SQL, VARCHAR是可变长度,那么我的 可变长度列 是有的。 可为NULL也是存在的。

CREATE TABLE varchar_size_demo(
c VARCHAR(65532)
) CHARSET=ascii ROW_FORMAT=Compact; 改成这样就行了。

InnoDB 一页是 16KB(16384字节),现在上面的那个sql,一行就是65532字节,那一页能存多少呢?

这样的话, 肯定是一条数据得用多个页去存。

Compact与Dynamic

mysql行格式默认是 Dynamic。

这两种行格式的区别:

​ Compact: 如果有溢出,会在第一页中存上下一页的指针。

​ Dynamic: 这个有一页专门存放指针的,用来指向数据的一页。(mysql默认的行格式)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值