先祝大家新年快乐,希望新的一年万事如意,事业高升。
1,命名规范表名、字段名、索引名采用小写字母,尽量做到见名知义,避免使用缩写。
特别要强调的是MySQL在win系统下不区分大小写,但是在Linux系统是区分大小写的,所以尽量不要使用大写字母,可以避免节外生枝。
2,表必备三字段:id,create_time,update_timeid作为主键,建议使用无符号bigint,可以支持的范围是0-,足以满足我们的业务需要。
如果id需要对外展示,比如id作为订单id等,可以使用雪花算法生成的id。
雪花算法生成的id步长不固定,但是仍然遵守大致递增的规律,对MySQL性能没有影响的同时,又可以很好的保证竞争对手无法通过订单id推算订单量。
create_time表示记录创建时间,update_time表示记录更新时间。
3,不要使用保留字使用保留字可能会在某些场景下出现莫名其妙的bug。
常见的保留字如:desc、case、revoke等。
4,尽量不要使用物理删除使用逻辑删除可以让我们追踪记录的变化情况,在很多关键时刻是可以用来救命的。
而一旦使用物理删除,那记录就很难找回了。
当然,逻辑删除可能会对唯一索引造成影响。
5,小数类型使用decimal,禁止使用float和doublefloat和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,字符集统一采用utf8mb4utf8mb4可以支持存储emoji表情,统一字符集的好处在于,不会让索引在某些场景下失效。
13,没必要提前分库分表单表容量达到2个G或者数据量万以上再考虑分库分表,提前分库分表可能会带来适得其反的效果。
14,时间字段建议选择datetime在一张表中,时间字段是必不可少的,如创建时间,更新时间等。
datetime格式是yyyy-mm-ddhh:mm:ss,占8个字节,并且与时区无关,建议优先考虑。
最后本文给大家分享了设计表时的一些经验准则,如果您有更好的优化经验,也欢迎在评论区分享指正。
#我们一起跨年#我是
程序员拾山,坚持每日技术分享,期待与大家一起学习成长,也感谢您的点赞和