mysql计算数据占用多少空间

mysql计算数据占用多少空间

比如你数据库某一张表有三个字段:一个int型,一个long型,一个varchar(100) 型,一个date型。
int型占用4个字节(一个字节8位),long型占用8个字节,data占用8字节。
那么一行占用:4+8+100+8=120Byte。
那么100万行,大约有115M。这是三列。如果是10列,就可以粗略估计出来了

mysql的数据类型

主要包括以下五大类

  1. 数字类型:整数类型 tinyint、smallint、mediumint、int、bigint
  2. 数字类型:浮点数类型 float、double、decimal
  3. 字符串类型 char、varchar、tinyblob、blob、mediumblob、longblob、tinytext、text、mediumtext、longtext、Enum、Set
  4. 日期类型 Date、DateTime、TimeStamp、Time、Year
  5. 其他数据类型:用的比较少,暂不介绍

数字类型

参考:https://dev.mysql.com/doc/refman/5.7/en/integer-types.html

类型字节数范围用途
TINYINT1 字节-128~127
UNSIGNED : 0~255
小整数值
SMALLINT2 个字节-32768~32767
UNSIGNED :0~ 65535
大整数值
MEDIUMINT3 个字节-8388608~8388607
UNSIGNED :0~16777215
大整数值
INT或INTEGER4 个字节-231(2147483648)~231-1(2147483647)
UNSIGNED : 0~2^32(4294967295)
大整数值
BIGINT8 个字节-263~263-1
UNSIGNED : 0~2^64-1
极大整数值
FLOAT(X)4 如果 X < = 24
8 如果 25 < = X < = 53
单精度
浮点数值
FLOAT4 个字节-3.4E+38~3.4E+38( 约 )单精度
浮点数值
DOUBLE8 个字节-1.79E+308~1.79E+308( 约 )双精度
浮点数值
DOUBLE PRECISION8 个字节双精度
浮点数值
DECIMAL(M,D)M字节(D+2 , 如果M < D)依赖于M和D的值小数值,金额

注意:decimal采用的是四舍五入,decimal插入的数据超过精度之后会触发警告。float和double采用的是四舍六入五成双。

什么是四舍六入五成双?

就是5以下舍弃5以上进位,如果需要处理数字为5的时候,需要看5后面是否还有不为0的任何数字,如果有,则直接进位,如果没有,需要看5前面的数字,若是奇数则进位,若是偶数则将5舍掉


字符串类型

类型字节数范围用途
Char(N) [ binary]NN=1~255 个字节
binary :分辨大小写
固定长度
VarChar(N) [binary]NN=1~255 个字节
binary :分辨大小写
可变长度,实际占有字节数为L+1
TinyBlobL+1最大长度255个字节(2^8-1)储存二进位资料,且有分大小写,不超过255个字符的二进制字符串
TinyTextL+1最大长度255个字节(2^8-1)储存二进位资料,且有分大小写,短文本字符串
BlobL+2最大长度65535个字节(2^16-1)储存二进位资料,且有分大小写,二进制形式的长文本数据
TextL+2最大长度65535个字节(2^16-1)储存二进位资料,且有分大小写,长文本数据
MediumBlobL+3最大长度 16777215 个字节(2^24-1)储存二进位资料,且有分大小写,二进制形式的中等长度文本数据
MediumTextL+3最大长度 16777215 个字节(2^24-1储存二进位资料,且有分大小写,中等长度文本数据
LongBlobL+4最大长度4294967295个字节 (2^32-1)储存二进位资料,且有分大小写,二进制形式的极大文本数据
LongTextL+4最大长度4294967295个字节 (2^32-1)储存二进位资料,且有分大小写,极大文本数据
Enum(‘value1’,‘value2’,…)1 或 2 个字节, 取决于枚举值的数目(最大值65535)集合最大数目为65535单选,sex enum(1,0),可用TINYINT代替
Set(‘value1’,‘value2’,…)1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)集合最大数目为64复选,hobby set(‘打羽毛球’,'打乒乓球’,'看电影’,'听音乐’)

说明:表格中的L表示存储的数据本身占用的字节,L 以外所需的额外字节为存放该值的长度所需的字节数。MySQL 通过存储值的内容及其长度来处理可变长度的值,这些额外的字节是无符号整数。


日期类型

类型字节数范围格式用途
DATE3 个字节1000-01-01 ~ 9999-12-31yyyy-MM-dd日期值
DATETIME8 个字节1000-01-01 00:00:00 ~ 9999-12-31 23:59:59yyyy-MM-dd HH:mm:ss混合日期和时间值
TIMESTAMP4 个字节1970-01-01 00:00:00 ~ 北京时间2038-01-19 11:14:07yyyyMMddHHmmss混合日期和时间值,时间戳
TIME3 个字节负838:59:59 ~ 正838:59:59HH:mm:ss时间值或持续时间
YEAR1 字节1901 ~ 2155yyyy年份值

注意:日期格式中,大写和小写是有区别的

字母格式化说明
Y大写的 Y 表示的是Week year(跨年的那一周,当天所在的周属于哪一年,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年,比如2020年12月31日,这一天应该是2020年,如果用大写的Y进行格式化,那这一天就变成了了2021年了)
y小写的y 是Year(跨年的那一周,是哪年就是哪年)
M月份
m分钟
H小时:24小时制
h小时:12小时制

数据类型选择的一些建议

  • 选小不选大:一般情况下选择可以正确存储数据的最小数据类型,越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小
  • 简单就好:简单的数据类型的操作通常需要更少的CPU周期,例如:整型比字符操作代价要小得多,因为字符集和校对规则(排序规则)使字符比整型比较更加复杂。
  • 尽量避免NULL:尽量制定列为NOT NULL,除非真的需要NULL类型的值,有NULL的列值会使得索引、索引统计和值比较更加复杂。
  • 浮点类型的建议统一选择decimal
  • 记录时间的建议使用int或者bigint类型,将时间转换为时间戳格式,如将时间转换为秒、毫秒,进行存储,方便走索引

参考资料:https://blog.csdn.net/weixin_39624774/article/details/111276746

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值