Postgres:组合列的优点

时间:2017-01-01 08:41:41

标签: database postgresql indexing database-performance

背景:

我有三列具有以下大小的字节(总共8个):4(int),2(小int),2(小int)。

我在这三列上创建了一个多列(又称复合)索引(按上面指定的顺序)。我将做两种类型的选择查询:

  1. 基于第一个4字节列查找范围。第一列将单调增加(时间戳)。
  2. 键盘查找指定所有这三个值的位置。
  3. 问题:Postgres将这三个列组合成一个8字节的bigint并处理应用层中的分离是否有任何好处?

    我要求对数据库查询和存储效率提出看法。

1 个答案:

答案 0 :(得分:1)

我怀疑从存储方面来说,任何合并的收益都会很小,并且会被这样做的限制所抵消。是的,您可以组合,但不能对字段的子部分进行任何参照完整性检查。即元组A可以与元组B相关,但A和B必须是表的整个字段的子集。这是1NF原子性要求的基础。

现在,您可以使用函数在字段内查询以提取所需的信息,如果您知道自己在做什么,甚至可以索引这些函数的输出。但是这会占用比你原来更多的空间,你仍然会失去参照完整性执行的可能性。

一般来说,空间是一个问题,但不是在这个优化水平。除非你有非常专业的需求,否则组合这些价值会带来比它解决的问题更多的问题。