我是PostgreSQL的新手,特别是它的性能调优方面。基本上我们通过查询3个整数值来访问数据:segmentSize(范围1 ... 10),segmentX(范围+/- 100,000),segmentY(范围+/- 100,000)。
前瞻性考虑:当数据量增长时,可以将数据分成多个表,每个segmentSize一个,和/或segmentX和segmentY的连续范围。
目前的选择:我有一个架构选择直接使用密钥(segmentSize,segmentX,segmentY)或 - 为了获得性能 - 在PostgreSQL之外创建一个合成密钥,将segmentX,segmentY组合成一个整数值这成为关键(或更不可能,全部三个(segmentSize,segmentX,segmentY)。
问题:假设我们并不太关心来自segmentX的这种“组合密钥”派生的成本,在Postgress之外发生了segmentY,并且考虑到我们并没有专门节省空间后的每行字节数量数据(除非它产生性能差异), ....对于查询范围segmentX * segmentY的单个int值,是否会有任何可衡量或有意义的性能增益,而不是查询segmentX和segmentY的两个单独的int值的组合?
很多,非常感谢。请随意添加任何扩展适用数据和索引策略的链接,以最大限度地提高SELECT /读取性能。
答案 0 :(得分:1)
将两个(或三个)列组合成密钥的单个值的性能优势可能非常小。某些用法实际上可能伤害性能;如果这些值在其他表中有意义,则需要“导航”合成键,以防止计划可能更快。当有可用的自然键时,使用合成键往往属于“过早优化”的标题,所有风险都与此相关 - 包括实际上会使事情变慢的高概率。