4

我是 PostgreSQL 的新手,尤其是它的性能调优方面。基本上,我们通过查询 3 个整数值来访问数据:segmentSize(范围 1...10)、segmentX(范围 +/- 100,000)、segmentY(范围 +/- 100,000)。

前瞻性考虑:当数据量增长时,有可能将数据分段到多个表中,每个单独的 segmentSize 和/或 segmentX 和 segmentY 的连续范围。

目前的选择:我有一个架构选择,要么直接使用键(segmentSize、segmentX、segmentY),要么——为了获得性能——在 PostgreSQL 之外创建一个合成键,将 segmentX、segmentY 组合成一个整数值,成为关键(或者不太可能,所有三个(segmentSize,segmentX,segmentY)。

问题:假设我们不太关心从segmentX,segmentY在Postgress之外发生的这种“组合密钥”派生的成本,并且考虑到我们并不是专门针对每行数据的字节顺序节省空间(除非它会产生性能差异),....是否会通过查询范围segmentX * segmentY的单个int值而不是查询segmentX和segmentY的两个独立int值的组合来获得任何可衡量或有意义的性能增益?

非常感谢。请随意包含任何扩展适用数据和索引策略的链接,以最大限度地提高 SELECT/读取性能。

4

1 回答 1

1

将两(或三)列组合成单个键值的性能优势可能非常小。它实际上可能会损害某些用途的性能;如果这些值在其他表中有意义,则通过合成键“导航”的需要会阻止考虑可能更快的计划。当有可用的自然密钥时使用合成密钥往往属于“过早优化”的标题,伴随着与之相关的所有风险——包括它实际上会使事情变慢的可能性很高。

于 2012-04-04T18:24:35.213 回答