扫码关注官方订阅号
在设计表的过程中,比如英雄等级,英雄id,角色id等等,这些值的位数最多在四位数,我基本都设为char型或者varchar,因为我觉得可以节省内存,不知道这样子对不对,还有我把所有字段都设为not null,希望大家能给小弟一些建议在设计数据库时
小伙看你根骨奇佳,潜力无限,来学PHP伐。
等级 id 这些都是数字吧?用int会节省空间
int是四个字节,char是一个字节。理论上你将其存储为char是存储不下的吧,char是八位,最多表示0~256。如果用varchar的话还需要额外的两字节存储。
并不清楚你的数据量有多大,之前我做过每日数据增量过亿的项目,这类表字段一般使用SMALLINT类型,是不会有性能问题的。
如果是小流量系统或者说系统初期,建议还是把精力放在功能设计上,只要库不是设计的太过分,不太会留下过大的技术债务的,毕竟现在的开源组件也都很给力。
数值的选取:状态值:tinyint;有限范围值:根据范围选择tinyint(不要用enum),smallint,mediumint ,int, bigint, float, double;如果数值是无符号的,则设置unsigned;从技术上尽可能将字段设置成NOT NULL,但如果业务上要求该字段可以为NULL,而且如果该字段不会被建立索引,则保持NULL,否则可以用''(空字符串)代替;
tinyint
smallint
mediumint
int
bigint
float
double
unsigned
NOT NULL
NULL
就题主所说的情况,应该选用UNSIGNED SMALLINT NOT NULL,用char可能有遭遇一点小坑(有兴趣的可以评论留言,明天再说,现在有点晚了)。
UNSIGNED SMALLINT NOT NULL
char
平时用多了就稍微记一下tinyint,smallint,mediumint和int的取值范围,前三个要求精确背出,第四个知道大概是21E左右就好了。
相比节省内存,更重要的是表结构设计,看上去你这个表的数据量可能在1W以内,内存并不是关注点。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
等级 id 这些都是数字吧?
用int会节省空间
int是四个字节,char是一个字节。
理论上你将其存储为char是存储不下的吧,char是八位,最多表示0~256。如果用varchar的话还需要额外的两字节存储。
并不清楚你的数据量有多大,之前我做过每日数据增量过亿的项目,这类表字段一般使用SMALLINT类型,是不会有性能问题的。
如果是小流量系统或者说系统初期,建议还是把精力放在功能设计上,只要库不是设计的太过分,不太会留下过大的技术债务的,毕竟现在的开源组件也都很给力。
数值的选取:
状态值:
tinyint;有限范围值:根据范围选择
tinyint(不要用enum),smallint,mediumint,int,bigint,float,double;如果数值是无符号的,则设置
unsigned;从技术上尽可能将字段设置成
NOT NULL,但如果业务上要求该字段可以为NULL,而且如果该字段不会被建立索引,则保持NULL,否则可以用''(空字符串)代替;就题主所说的情况,应该选用
UNSIGNED SMALLINT NOT NULL,用char可能有遭遇一点小坑(有兴趣的可以评论留言,明天再说,现在有点晚了)。平时用多了就稍微记一下
tinyint,smallint,mediumint和int的取值范围,前三个要求精确背出,第四个知道大概是21E左右就好了。相比节省内存,更重要的是表结构设计,看上去你这个表的数据量可能在1W以内,内存并不是关注点。