我想优化我的PostgreSQL数据库设计。
目前,我有一张表格,其中包含以下列:
name - char(4)
color - char(6)
key - text
value - real[]
查询速度对我很重要:
SELECT value FROM table WHERE name = x AND color = y AND key = z;
我应该为每个名称创建一个新表,而不是将所有名称都放在一个表中吗?
我应该将2000 char(6)颜色映射到2000 smallint颜色吗?
我还能做些什么来改善数据库设计?
答案 0 :(得分:0)
表的大小应该不是问题,将表拆分为多个表不会提高查询速度。
如果您真的要拆分表,则应考虑列表分区,但这仅在所有查询中都包含WHERE name = ...
的情况下才能很好地起作用。分区会降低查询速度,因为PostgreSQL必须在计划(或在v11中执行)过程中考虑所有分区。
仅当您要从表中批量删除数据并且可以删除分区来执行此操作时,分区才有用。它还可以加快对一个或几个分区执行顺序扫描的查询。
我只是将桌子原样保留。主键索引已经非常适合您的查询,而且我认为您不能做得更好。请记住,如果使用索引,查询大小不会影响查询速度。