表中字段的命名长度不应该超过30个字节
【建议】表中的自增列(auto_increment属性),推荐使用bigint类型 。因为无符号int存储范围为-2147483648~2147483647(大约21亿左右),溢出后会导致报错 。
【建议】业务中选择性很少的状态status、类型type等字段推荐使用tinytint或者smallint类型节省存储空间 。
【建议】业务中IP地址字段推荐使用int类型,不推荐用char(15) 。因为int只占4字节,可以用如下函数相互转换,而char(15)占用至少15字节 。一旦表数据行数到了1亿,那么要多用1.1G存储空间 。
SQL:select inet_aton('192.168.2.12'); select inet_ntoa(3232236044);
php: ip2long(‘192.168.2.12’); long2ip(3530427185);
【建议】不推荐使用enum,set 。因为它们浪费空间,且枚举值写死了,变更不方便 。推荐使用tinyint或smallint 。
【建议】不推荐使用blob,text等类型 。它们都比较浪费硬盘和内存空间 。在加载表数据时,会读取大字段到内存里从而浪费内存空间,影响系统性能 。建议和PM、RD沟通,是否真的需要这么大字段 。Innodb中当一行记录超过8098字节时,会将该记录中选取最长的一个字段将其768字节放在原始page里,该字段余下内容放在overflow-page里 。不幸的是在compact行格式下,原始page和overflow-page都会加载 。
【建议】存储金钱的字段,建议用int,程序端乘以100和除以100进行存取 。因为int占用4字节,而double占用8字节,空间浪费 。
【建议】文本数据尽量用varchar存储 。因为varchar是变长存储,比char更省空间 。MySQL server层规定一行所有文本最多存65535字节,因此在utf8字符集下最多存21844个字符,超过会自动转换为mediumtext字段 。而text在utf8字符集下最多存21844个字符,mediumtext最多存2^24/3个字符,longtext最多存2^32个字符 。一般建议用varchar类型,字符数不要超过2700 。
【建议】时间类型尽量选取timestamp 。因为datetime占用8字节,timestamp仅占用4字节,但是范围为1970-01-01 00:00:01到2038-01-01 00:00:00 。更为高阶的方法,选用int来存储时间,使用SQL函数unix_timestamp()和from_unixtime()来进行转换 。
推荐阅读
- 浅谈Google Analytics
- 领域驱动设计DDD和CQRS架构模式落地实践
- 家居走廊装饰设计介绍
- 榻榻米装饰设计要点
- 如何设计一个良好的API接口?
- 国产数据库的崛起
- 如何设计餐厅的背景墙
- 新古典风格设计介绍
- 数据库MYSQL的查询
- 网页设计需要学什么?