偶尔情况的新列:新列或单独的表或json列

时间:2018-03-04 06:43:40

标签: mysql database sharding entity-attribute-value

我们正在重写现有系统,在主要库存表中,由于需要大约15-20%的整体情况需要这些列,因此会引入一些新列。这意味着80-85%的时间,这些列将为空。这些新的列数据类型包括decimal,varchar,smallint。

现在,我们有三个选择:

  • 如上所述包含新列,并让80%的行在这些列中具有空值。这有80%的时间存在于类似5-6列中的空值的缺点。
  • 为这些列设置单独的表,并仅在需要这些列时才与主表连接。此连接仅在20%的情况下发生,因为它将由API请求驱动。这种方法有一个加入的缺点。
  • 在现有表格中添加json列,查找不需要查询的字段和查询字段,添加单独的列。

我认为第二种选择似乎最合适,但我根据您的经验需要意见

P.S。:计划基本上也将此数据库从单个实例移动到分片数据库。而sql实例是MySQL。

1 个答案:

答案 0 :(得分:0)

我会选择option (2)。我们将主表称为Table A,将子表称为Table B

由于80%的时间,新列的值为NULL,因此Table ATable B的关系可以是1-to-11-to-0。这意味着当值为NULL时,不需要将记录插入Table B

这会使Table B相对较小,因此JOIN操作不会产生太大的性能问题。

JSON列可以是另一个选项,但对其中每个字段的类型进行的检查不那么严格。