背景:
我有三列具有以下大小的字节(总共8个):4(int),2(小int),2(小int)。
我在这三列上创建了一个多列(又称复合)索引(按上面指定的顺序)。我将做两种类型的选择查询:
问题:Postgres将这三个列组合成一个8字节的bigint并处理应用层中的分离是否有任何好处?
我要求对数据库查询和存储效率提出看法。
答案 0 :(得分:1)
我怀疑从存储方面来说,任何合并的收益都会很小,并且会被这样做的限制所抵消。是的,您可以组合,但不能对字段的子部分进行任何参照完整性检查。即元组A可以与元组B相关,但A和B必须是表的整个字段的子集。这是1NF原子性要求的基础。
现在,您可以使用函数在字段内查询以提取所需的信息,如果您知道自己在做什么,甚至可以索引这些函数的输出。但是这会占用比你原来更多的空间,你仍然会失去参照完整性执行的可能性。
一般来说,空间是一个问题,但不是在这个优化水平。除非你有非常专业的需求,否则组合这些价值会带来比它解决的问题更多的问题。