InnoDB(1)变长字段长度列表--mysql从入门到精通(六)

2023-01-30 00:00:00 数据 字段 字节 长度 制表

上篇文章我们总结了mysql字符集:

我们现在已经知道了,mysql客户端到服务器字符集是如何编码解码的,但表中数据到底存在哪里?以什么格式存放?mysql以什么方式访问这些数据?这些我们都会在下面一一解答。

我们之前说到过mysql-service和存储引擎,mysql-service包含tcp/ip连接、查询缓存,解码sql语句,优化sql语句。Mysql服务器支持不同的存储引擎,如InnoDB、MyISAM、Memory等,不同的存储引擎拥有不同的性能,存放的格式也是不同的,甚至memory都不是吧数据存在磁盘中,也就是服务器关闭,数据就会消息。而InnoDB和myISAM是我们常用的两个存储引擎,所以就先重点介绍支持事务的InnoDB。

InnoDB存储引擎

InnoDB是一个吧数据写入磁盘中的存储引擎,所以服务器宕机或者重启,数据都不会消失。而真正处理数据是在内存中,所以我们需要把磁盘上的数据写入内存,当在内存中处理新增或者修改数据时候,又会把内存中的数据刷新到磁盘上。我们知道处理内存和处理磁盘上的数据,运行和反映速度不在一个量级,所以在select数据的时候,难道从磁盘中一行一行查吗?当然不是,InnoDB解决的办法是,将数据分为若干页,每一页大小大概16kb。也就是一般情况下,少从磁盘读取16kb到内存中,一次也是少吧16kb的数据刷新到磁盘上。

先来创建一个compact_tb表,指定字符集为ascii,指定行格式为compact。还可以用另一个语句指定行格式,如下。

//创建的时候指定行格式
create TABLE compact_tb(
  c1 VARCHAR(10),
  c2 VARCHAR(10) NOT NULL,
  c3 CHAR(10),
  c4 VARCHAR(10)
) CHARSET=ascii ROW_FORMAT=COMPACT;
 
//另一个方法指定行格式
ALTER TABLE COMPACT_TB ROW_FORMAT=COMPACT;

相关文章