Performance 在PostgreSQL中对复合类型列进行哈希处理是否等同于对多个列进行哈希处理?

Performance 在PostgreSQL中对复合类型列进行哈希处理是否等同于对多个列进行哈希处理?,performance,postgresql,types,hash,indexing,Performance,Postgresql,Types,Hash,Indexing,我对Postgres中复合列的哈希索引性能有一个疑问。 底线是:性能是否与哈希索引多个列的性能相同,这些列的类型和布局与复合类型属性相同 让我谈谈具体情况: 我有一个季度的年度数据库转储,我打算在Postgres中重新导入并分析。我无法控制所提供数据的格式 它在多个位置使用由32个字符长度的十六进制代码组成的主键。很简单,它们是128位整数 我在Postgres中使用复合类型(bigint,bigint)模拟了这些主键,并提供了与文本之间的隐式转换 然而,我担心的是它的表现。有任何性能损失吗?1

我对Postgres中复合列的哈希索引性能有一个疑问。 底线是:性能是否与哈希索引多个列的性能相同,这些列的类型和布局与复合类型属性相同

让我谈谈具体情况: 我有一个季度的年度数据库转储,我打算在Postgres中重新导入并分析。我无法控制所提供数据的格式

它在多个位置使用由32个字符长度的十六进制代码组成的主键。很简单,它们是128位整数

我在Postgres中使用复合类型(bigint,bigint)模拟了这些主键,并提供了与文本之间的隐式转换


然而,我担心的是它的表现。有任何性能损失吗?

128位密钥对我来说毫无意义。有多少键值是实际有效的(在任何时候)?第二个问题可能是128位的内容或多或少是随机的,“连续”行将在键空间中来回跳转(这将导致不良的记录集群)。这方面的另一个方面是,给定键的前64位,第二个64位实际上取决于函数(因此:几乎是冗余的)。实际上,比较两个键字段而不是一个键字段并不是那么麻烦(IMHO),这只会导致难看的查询。 但我不知道你的数据


解决这类问题的data vault方法是只创建自己的代理密钥(int或bigint),并使用它而不是128位的monster。一个11查找表将完成其余的工作。这也解决了随着时间的推移,从只允许使用十六进制字符的字符(64)到使用mmencoded有效负载的字符(64)这一大问题。

128位密钥对我来说毫无意义。有多少键值是实际有效的(在任何时候)?第二个问题可能是128位的内容或多或少是随机的,“连续”行将在键空间中来回跳转(这将导致不良的记录集群)。这方面的另一个方面是,给定键的前64位,第二个64位实际上取决于函数(因此:几乎是冗余的)。实际上,比较两个键字段而不是一个键字段并不是那么麻烦(IMHO),这只会导致难看的查询。 但我不知道你的数据


解决这类问题的data vault方法是只创建自己的代理密钥(int或bigint),并使用它而不是128位的monster。一个11查找表将完成其余的工作。这也是一种解决随着时间的推移而变化的问题的方法,例如从只允许十六进制字符的字符(64)到带有mmencoded有效负载的字符(64)。

PostgreSQL
或简称
Postgres
PostgreSQL
或简称
Postgres
。谢谢你的回复,wildplasser。你说的很有道理。我想我会采纳你的建议,制作我自己的键(bigint应该可以工作,因为数据量没有那么大),并为任何使用BigThing的表制作11个查找表。谢谢。“外部”(非常外来;-)密钥的data vault方法确实是一种很好的方法,因为您对它们没有影响,所以应该尊重它们(并将它们视为“数据”)。您的导入步骤可能会变得更复杂一些(为以前批处理中不存在的BigThings创建密钥,然后再参考它们),但在我看来这并不是什么大事。顺便说一句。严格地说,您不需要将BigThing存储在单独的表中,只需将它们存储在同一个表中并在它们上构建(唯一的?)约束/索引即可实现相同的目的。(除非你很少使用它们:那么它们会使桌子变得比需要的更宽)谢谢你的回答,wildplasser。你说的很有道理。我想我会采纳你的建议,制作我自己的键(bigint应该可以工作,因为数据量没有那么大),并为任何使用BigThing的表制作11个查找表。谢谢。“外部”(非常外来;-)密钥的data vault方法确实是一种很好的方法,因为您对它们没有影响,所以应该尊重它们(并将它们视为“数据”)。您的导入步骤可能会变得更复杂一些(为以前批处理中不存在的BigThings创建密钥,然后再参考它们),但在我看来这并不是什么大事。顺便说一句。严格地说,您不需要将BigThing存储在单独的表中,只需将它们存储在同一个表中并在它们上构建(唯一的?)约束/索引即可实现相同的目的。(除非您很少使用它们:否则它们会使桌子超出需要)