美文网首页其他
数据结构设计与开发规范

数据结构设计与开发规范

作者: 勤_ | 来源:发表于2021-10-25 17:04 被阅读0次

    表设计规范

    • 对象名称必须使用小写,多单词统一使用下划线分割

    • 所有的表设计统一命名规范,主表用t_e_开头,关系表用t_con_开头,统计表用t_as_开头,例如
      plan_project换成t_e_plan_project,这样能见名知意理解作用。

    • 临时表必须以tmp_开头、以日期结尾,备份表必须以bak_开头、以日期结尾

    • 数据库和数据表统一使用UTF8MB4字符编码

    • 所有的表和字段必须添加注释

    • 表列保证在20个列以下,这样提高内存命中率,减少磁盘IO。

    • 主键id建议采用雪花算法,不要使用非自增的uuid。

    • 给表的外键的字段增加索引。

    • 这些表的字段大小长度按实际业务长度设计。

    • 尽量控制表行数在500万以内

    • 每一张InnoDB表都必须含有一个主键

      InnoDB 是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。每个表都可以有多个索引,但是表的存储顺序只能有一种 InnoDB是按照主键索引的顺序来组织表的。不要使用可能会更新的列作为主键,同时尽量不要使用UUIDMD5HASH等无序的字符串作为主键。在没有特别的情况下,要使用自增的整型或发号器作为主键。

    字段设计规范

    • 优先设置占存储空间最小的类型和长度

    • 使用 DATETIME存储时间

    • 尽可能避免使用TEXTBLOBENUM数据类型

      MySQL 内存临时表不支持TEXTBLOB这样的大数据类型,如果查询中包含这样的数据,在排序等操作时,就不能使用内存临时表,必须使用磁盘临时表进行,毋庸置疑会降低查询的效率。

    • 尽可能将所有的数据列定义为NOT NULL类型

      NULL列比较特殊,需要额外的空间来保存,同时会造成索引失效。

    • 金额、分数相关的数据必须使用DECIMAL数据类型

    • 表与表关联的键名保持一致或以关联表名的缩写为前缀

    • 固定长度的字符串字段务必使用CHAR

    • 使用UNSIGNEG存储非负整数

    • 禁止敏感数据以明文形式存储

      确保信息的安全性,比如密码、隐秘数据等。

    索引设计规范

    • 索引的命名以idx_开头,索引长度超过16个字符。

    • 禁止在索引列进行数学运算和函数运算

    • 避免冗余和重复索引

      在一张用户表里面,将用户id设置成主键的同时再设置成唯一索引,那就是重复索引,如果创建了索引(a,b),再设置a索引,则a为冗余索引,这两种错误的操作都会降低读写的性能。

    • 符合索引将区分度高的置前

      将区分度高的索引置前可以缩短查询的范围,以至提高查询的效率,特别是在JOIN连表查询,提高效率特别明显。

    • MySQL对索引字段长度是有限制的,TEXTBLOB类型只能使用前缀索引。

    SQL使用规范

    • 危险的SQL语句必须带上索引作为条件

    • 严禁使用SELECT *查询字段

    • 查询语句务必带上索引以提高查询效率

    • 必须避免数据类型隐式转换

    • 禁止使用带有数据值却不带有字段键名的INSERT操作

    • 尽可能使用JOIN替代子查询操作

    • 避免使用JOIN关联过多的表,关联太多的情况,需要表重新设计。

      一般情况下,建议JOIN的表不要超过5个,JOIN多表查询比较耗时时间,关联的表越多越耗时间,防止执行超时或死锁。

    • 合并操作、减少数据库的交互

    • 禁止使用ORDER BY RAND()随机排序语句

    • 禁止在WHERE语句中进行计算

    • 大批量写操作尽可能合理地分批次处理

      大批量的操作应当合理平均分批次处理,防止死锁影响业务,同时尽量将跑批这种大操作至于凌晨操作。

    • 不在数据库做运算,务必将运算置于业务层

    • 禁止使用索引做运算

    • 使用事务尽量简单化,同时控制事务执行的时间

      时间长会导致长时间锁表,造成死锁,进而影响业务。

    • IN语句参数的个数尽量控制在1000以内

    • 注意LIMIT分页查询效率,LIMIT越大效率越低

      # S1
      SELECT `username` FROM `user` LIMIT 10000,20;
      # S2
      SELECT `username` FROM `user` WHERE id>10000 LIMIT 20;
      
    • 禁止使用LIKE添加%前缀进行模糊查询

    • 禁止一条语句同时对多个表进行写操作

    相关文章

      网友评论

        本文标题:数据结构设计与开发规范

        本文链接:https://www.haomeiwen.com/subject/mpogoltx.html