gpt4 book ai didi

sql - PostgreSQL 单列索引与多列索引以获得最佳 SELECT 性能

转载 作者:行者123 更新时间:2023-11-29 11:50:52 26 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

关于sql - PostgreSQL 单列索引与多列索引以获得最佳 SELECT 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10016622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com