gpt4 book ai didi

sql - 多列上的 PostgreSQL 索引,什么时候太多了?

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

使用 PostgreSQL 9.6

我有一个表,其中包含一些我想过滤并按时间排序的值:

  • 时间戳(可以是在 UI 中选择的范围)
  • 状态字符串(目前只有少数已知值,也可以在 UI 中选择)
  • 上下文(用户界面中的数据范围)

我想知道我是否应该:

  1. 关于(上下文,状态)的 btree 索引 + 关于时间的单独索引
  2. 或关于(上下文、状态、时间)的 btree 索引
  3. 或每个上的 btree 索引?
  4. 或针对(时间、状态、上下文)的小时间范围的 btree 索引?

我怀疑数字 1 是最佳选择,context + status 将允许过滤掉值,然后它将扫描时间索引。我在我的数据上同时创建了 1 号并看到了一些改进,但是您如何在每种方法之间做出决定,是否有一些指导方针?

其中一个查询看起来或多或少像:

select * from event
where severity = 'WARNING' and
fk_context = 1359544
order by timestamp LIMIT 30; // Other one has timestamp > ...

另一个正在寻找时间范围。我看起来像 postgres 使用多个索引,一个带有 (fk_context, severity, timestamp),然后使用 (severity, time) 索引,但这也取决于限制。

最佳答案

你的问题不清楚。如果您有以下三种潜在情况:

where timestamp between @a and @b order by time
where status = @s order by time
where context = @c order by time

那么你需要三个索引:(timestamp, time)(status, time)(context, time)

如果条件是:

where timestamp between @a and @b and
status = @s and
context = @c
order by time

那么你需要一个索引,(status, context, timestamp, time)

还有其他符合你描述的可能性。

关于sql - 多列上的 PostgreSQL 索引,什么时候太多了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49296206/

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