mysql之数据存储单元

简介

在MySQL中,单行数据存储单元的大小并不是固定的,它取决于多种因素,如表结构中使用的数据类型以及所使用的存储引擎。

但是我们可以提供一些关于MySQL中典型行数据存储单元大小的一般性指引:

存储引擎

InnoDB(默认存储引擎)

InnoDB中单行数据存储单元的大小通常在8-16 KB之间,具体取决于数据类型和行格式(COMPACT、REDUNDANT、DYNAMIC或COMPRESSED)。

MyISAM

MyISAM中单行数据存储单元的大小通常小于InnoDB,因为它不需要管理事务和并发控制的开销。具体大小会根据数据类型而有所不同。

数据类型

  • 较小的数据类型,如INT、SMALLINT、TINYINT、CHAR和VARCHAR(n)(其中n较小),每行占用的存储空间通常较少。
  • 较大的数据类型,如LONGTEXT、MEDIUMBLOB和VARCHAR(n)(其中n较大),可能会显著增加行数据存储单元的大小。

行格式

行格式也会影响行数据存储单元的大小。例如,InnoDB中的DYNAMIC行格式可以比COMPACT或REDUNDANT格式更高效地存储变长列。

要更准确地了解您特定MySQL设置中的行数据存储单元大小,可以使用以下SQL查询来检查指定表的平均行长度:


SELECT AVG_ROW_LENGTH
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '您的数据库名称'
AND TABLE_NAME = '您的表名称';

这将提供指定表的平均行数据存储单元大小的估计值。请记住,实际大小可能会因存储的具体数据而有所不同。

定长型vs变长型数据类型

定长数据类型,如CHAR(n),每行大小是可预测的,而变长数据类型,如VARCHAR(n),大小会根据实际存储的数据而有所不同。

定长字段(Fixed-length Fields)

定长字段指的是在建表时就固定了长度的字段,通常使用以下数据类型:

  • CHAR(n): 存储长度为n个字符的字符串,不足n个字符时会用空格填充。
  • INT: 存储4个字节的整数。
  • FLOAT: 存储4个字节的浮点数。
  • DATE: 存储日期,长度为3个字节。

定长字段的特点

  • 长度固定,不会根据实际数据长度而改变。
  • 查询和访问速度快,因为可以直接计算出数据在磁盘上的确切位置。
  • 存储空间利用率较低,因为即使存储的数据长度小于定义的长度,也会占用完整的存储空间。

不定长字段(Variable-length Fields)

  • 不定长字段指的是在建表时可以指定最大长度,但实际存储的长度会根据数据的长度而变化的字段,通常使用以下数据类型:
  • VARCHAR(n): 存储长度可变的字符串,最大长度为n个字符。
  • TEXT: 存储可变长度的文本数据,最大长度为65,535个字符。
  • BLOB: 存储可变长度的二进制数据,最大长度为65,535个字节。

不定长字段的特点

  • 长度可变,根据实际数据长度而改变。
  • 存储空间利用率较高,因为只占用实际数据所需的存储空间。
  • 查询和访问速度相对较慢,因为需要先计算出数据在磁盘上的位置。
  • 使用定长字段和不定长字段的主要区别在于:

存储空间利用率

  • 定长字段会浪费一部分存储空间,但查询速度快。
  • 不定长字段能更高效地利用存储空间,但查询速度相对较慢。

适用场景

  • 定长字段适用于存储固定长度的数据,如身份证号、手机号等。
  • 不定长字段适用于存储长度不确定的数据,如文章标题、用户评论等。
  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cherry Xie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值