云数据库 GAUSSDB(FOR MYSQL)-库表规范

时间:2024-04-29 19:22:27

库表规范

  • 所有创建的MySQL表必须为InnoDB引擎,适配MySQL的其它引擎不支持事务。
  • 小数类型为decimal,禁止使用float和double。

    float和double在存储的时候,存在精度损失的问题,很可能在值比较的时候得到的结果有误。如果存储的数据范围超过decimal的范围,建议将数据拆成整数和小数分开存储。

  • 禁用保留字,如desc、range、match、delayed等,请参考保留关键字
  • 数据表必须有主键,可以使用业务相关,有序且具有唯一性的字段作为主键,也可以使用业务无关的自增长字段作为主键。
  • 表字段必须有默认值加NOT NULL,数字类型默认值推荐给0,varchar等字符类型默认值推荐空字符串''。

    无主键不仅容易导致主库执行速度慢和复制延迟问题。

  • 避免使用分区表,如有需要,可以使用多个独立的表代替。

    分区表的缺点:

    • DDL操作需要锁定所有分区,导致所有分区上操作都被阻塞。
    • 当表数据量较大时,对分区表进行DDL或其他运维操作难度大风险高。
    • 分区表使用较少,存在未知风险。
    • 当单台服务器性能无法满足时,对分区表进行分拆的成本较高。
    • 当分区表操作不当导致访问所有分区时,会导致严重的性能问题。
  • 建议表包含两个字段:create_time,update_time, 且均为datetime类型。

    数据仓库拖取数据时可以利用这两个统一字段无需询问业务。

    在数据库出现意外时可以判断数据进入数据库和修改的时间,在极端情况可以帮助数据恢复的判断。

  • varchar是可变长字符串,不预先分配存储空间,长度不要超过2048。

    如果存储长度大于此值,定义字段类型为text,或者独立出来一张表,用主键来对应,避免影响其他字段索引效率。

  • 表单行行内长度不得超过1024字节。
  • 控制单表字段数量,字段上限50个。
  • 如果存储的字符串长度几乎相等,使用char定长字符串类型。
  • 字段允许适当跨表冗余,以避免关联查询,提高查询性能,但必须考虑数据一致。

    冗余字段应遵循:

    • 不是频繁修改的字段。
    • 不是varchar超长字段和text字段。
  • 合适的存储长度(不建议使用LONG TEXT, BLOB等长类型字段),不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。
support.huaweicloud.com/usermanual-gaussdbformysql/gaussdbformysql_05_0103.html