MySQL各字段类型占用字节

2024-01-02 05:58:53

数据表每个字段所占空间,需要计算出来.在设计表尽量少占用空间,这样在批量插入时单次插入的条数会增加.从而提高效率

数字类型

类型占用字节
tinyint1个字节
smallint2个字节
mediumint3个字节
int4个字节
bigint8个字节
float4个字节
double8个字节
DECIMAL定义为DECIMAL(M,D)?则占用 M 个字节

时间类型

数据类型MySQL 5.6.4 之前所需的存储从 MySQL 5.6.4 开始所需的存储
YEAR1 字节1 字节
DATE3 字节3 字节
TIME3 字节3 字节 + 秒小数部分存储
DATETIME8 字节5 字节 + 秒小数部分存储
TIMESTAMP4 字节4 字节 + 秒小数部分存储

从MySQL 5.6.4开始,YEAR和DATE的存储保持不变。但是,表示时间、日期时间和时间戳?不同。需要 5 个字节而不是 8 个字节 非分数部分,所有三个部分都有一个分数部分 这需要 0 到 3 个字节,具体取决于小数存储值的秒精度。

秒小数部分精度所需存储
00 字节
1, 21 字节
3, 42 字节
5, 63 字节

例如,TIME(0)、TIME(2)、TIME(4) 和?TIME(6)?使用 0、1、3、5 个字节, TIME 和?TIME(0)?是等价的,需要相同的存储。

字符类型

  • char和varchar,text根据存储的是汉字还是字母和数字占用的字节不同
  • char是固定长度,varchar是可变长度.字节根据存储数据变化
  • 不同的编码格式下所占字节也不同, 一个字符最多占用4个字节

那批量插入时一次多少条效率最高呢?

  1. 需要根据数据表字段所占用的字节 * 批量插入的条数(不能超过max_allowed_packet设置的大小)进行测试, 不一定到达max_all_packet最好.
  2. 也和缓冲区innodb_buffer_pool_size参数有关, 缓冲区设置大了, 磁盘IO的次数可能会少一些
  3. max_allowed_packet和innodb_buffer_pool_size说明

官网链接

文章来源:https://blog.csdn.net/zc_huiyanruju/article/details/135273419
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。