SQL数据库设计:额外的表与额外的主键列

时间:2018-10-25 03:50:26

标签: postgresql

我想优化我的PostgreSQL数据库设计。

目前,我有一张表格,其中包含以下列:

name  - char(4)
color - char(6)
key   - text
value - real[]
  • 主键由多个字段(名称,颜色,键)组成
  • 我大约有300到400个名字。
  • 每个名称都有2000种不同的颜色
  • 每种颜色都有40000个不同的键值对
  • 因此每个名称都有2000 x 40000 = 80000000行
  • 我不更新行
  • 我只在填满数据库时才插入新行

查询速度对我很重要:

SELECT value FROM table WHERE name = x AND color = y AND key = z;

我应该为每个名称创建一个新表,而不是将所有名称都放在一个表中吗?

我应该将2000 char(6)颜色映射到2000 smallint颜色吗?

我还能做些什么来改善数据库设计?

1 个答案:

答案 0 :(得分:0)

表的大小应该不是问题,将表拆分为多个表不会提高查询速度。

如果您真的要拆分表,则应考虑列表分区,但这仅在所有查询中都包含WHERE name = ...的情况下才能很好地起作用。分区会降低查询速度,因为PostgreSQL必须在计划(或在v11中执行)过程中考虑所有分区。

仅当您要从表中批量删除数据并且可以删除分区来执行此操作时,分区才有用。它还可以加快对一个或几个分区执行顺序扫描的查询。

我只是将桌子原样保留。主键索引已经非常适合您的查询,而且我认为您不能做得更好。请记住,如果使用索引,查询大小不会影响查询速度。