python - mysql 数据库表设计问题
伊谢尔伦
伊谢尔伦 2017-04-18 09:07:34
[Python讨论组]

在设计表的过程中,比如英雄等级,英雄id,角色id等等,这些值的位数最多在四位数,我基本都设为char型或者varchar,因为我觉得可以节省内存,不知道这样子对不对,还有我把所有字段都设为not null,希望大家能给小弟一些建议在设计数据库时

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(3)
巴扎黑

等级 id 这些都是数字吧?
用int会节省空间

PHP中文网

int是四个字节,char是一个字节。
理论上你将其存储为char是存储不下的吧,char是八位,最多表示0~256。如果用varchar的话还需要额外的两字节存储。

并不清楚你的数据量有多大,之前我做过每日数据增量过亿的项目,这类表字段一般使用SMALLINT类型,是不会有性能问题的。

如果是小流量系统或者说系统初期,建议还是把精力放在功能设计上,只要库不是设计的太过分,不太会留下过大的技术债务的,毕竟现在的开源组件也都很给力。

高洛峰

数值的选取:
状态值:tinyint
有限范围值:根据范围选择tinyint(不要用enum),smallintmediumint ,int, bigint, float, double
如果数值是无符号的,则设置unsigned
从技术上尽可能将字段设置成NOT NULL,但如果业务上要求该字段可以为NULL,而且如果该字段不会被建立索引,则保持NULL,否则可以用''(空字符串)代替;

就题主所说的情况,应该选用UNSIGNED SMALLINT NOT NULL,用char可能有遭遇一点小坑(有兴趣的可以评论留言,明天再说,现在有点晚了)。

平时用多了就稍微记一下tinyintsmallintmediumintint的取值范围,前三个要求精确背出,第四个知道大概是21E左右就好了。

相比节省内存,更重要的是表结构设计,看上去你这个表的数据量可能在1W以内,内存并不是关注点。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号