给同事分享MySQL表的设计准则,领导听

先祝大家新年快乐,希望新的一年万事如意,事业高升。

1,命名规范

表名、字段名、索引名采用小写字母,尽量做到见名知义,避免使用缩写。

特别要强调的是MySQL在win系统下不区分大小写,但是在Linux系统是区分大小写的,所以尽量不要使用大写字母,可以避免节外生枝。

2,表必备三字段:id,create_time,update_time

id作为主键,建议使用无符号bigint,可以支持的范围是0-,足以满足我们的业务需要。

如果id需要对外展示,比如id作为订单id等,可以使用雪花算法生成的id。

雪花算法生成的id步长不固定,但是仍然遵守大致递增的规律,对MySQL性能没有影响的同时,又可以很好的保证竞争对手无法通过订单id推算订单量。

create_time表示记录创建时间,update_time表示记录更新时间。

3,不要使用保留字

使用保留字可能会在某些场景下出现莫名其妙的bug。

常见的保留字如:desc、case、revoke等。

4,尽量不要使用物理删除

使用逻辑删除可以让我们追踪记录的变化情况,在很多关键时刻是可以用来救命的。

而一旦使用物理删除,那记录就很难找回了。

当然,逻辑删除可能会对唯一索引造成影响。

5,小数类型使用decimal,禁止使用float和double

float和double都存在精度损失的问题,使用decimal可以对数字进行精确的保存。

金融领域还有一种常见的做法是使用int类型,保存单位为分的数字,只不过使用时需要进行转换。

6,选择合适的字符长度

恰当的字符长度可以节约数据库表空间,索引空间,还可以提升检索的速度。

比如人的年龄使用无符号tinyint,范围为0-。

姓名使用varchar(20),按照规定,汉族名字最多为6个字,但是还要考虑到少数民族的朋友。

性别使用tinyint,手机号使用char(11)等等。

7,字段尽量定义为notnull

每个默认值为null的字段会在行头额外占据1个字节的存储空间,还可能使得我们的sql产生预期外的结果。

8,大字段尽量拆分到扩展表

不建议在一张表中过多的使用大字段,比如varchar(),text类型等。

大字段的查询频率一般不会太高,放到主表中会拖累索引效率,建议放到单独的扩展表中,通过主键关联即可。

9,合理的使用索引

不要吝啬创建索引,索引的目的就是为了加速查询,只要对业务有帮助就可以使用。

当前,也不要滥用,尽量对索引进行评估,该合并的索引就合并为联合索引。

10,不必强求数据库三范式

三大范式产生的背景是资源紧张不足,我们只能尽可能地节约资源,从而获得更高的性能。

但是现在随着技术的发展,服务器的性能也越来越强,我们在设计表时,通过适当的字段冗余,来获取更高更快的查询性能也是没有问题的。

11,使用InnoDB引擎

InnoDB引擎已经一统天下,这个也没什么争议。

12,字符集统一采用utf8mb4

utf8mb4可以支持存储emoji表情,统一字符集的好处在于,不会让索引在某些场景下失效。

13,没必要提前分库分表

单表容量达到2个G或者数据量万以上再考虑分库分表,提前分库分表可能会带来适得其反的效果。

14,时间字段建议选择datetime

在一张表中,时间字段是必不可少的,如创建时间,更新时间等。

datetime格式是yyyy-mm-ddhh:mm:ss,占8个字节,并且与时区无关,建议优先考虑。

最后

本文给大家分享了设计表时的一些经验准则,如果您有更好的优化经验,也欢迎在评论区分享指正。

#我们一起跨年#

我是

程序员拾山,坚持每日技术分享,期待与大家一起学习成长,也感谢您的点赞和


转载请注明:http://www.aierlanlan.com/rzfs/4238.html