MySQL各字段类型占用字节

本文讨论了在设计数据库表时如何考虑每个字段的存储空间以减少占用,重点关注数字、时间、字符类型及其对批量插入效率的影响。同时提到了MySQL中的max_allowed_packet和innodb_buffer_pool_size参数对性能的影响。
摘要由CSDN通过智能技术生成

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

数字类型

类型占用字节
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说明

官网链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值