gpt4 book ai didi

sql - PostgreSQL:仅扫描相关分区

转载 作者:行者123 更新时间:2023-11-29 12:21:35 25 4
gpt4 key购买 nike

我试图分析为什么某个查询需要相当长的时间。它在分区的 PostgreSQL (v9.1) 表上运行。它按月分区。该规则基于包含日期整数表示的 a 列(例如 20130801)。

如果我写这样的查询:

EXPLAIN     SELECT DISTINCT (user_id)
FROM users
WHERE
date_tk >= 20130801

仅选择相关分区。但是,当我运行这样的程序时,它会扫描所有分区:

EXPLAIN     SELECT DISTINCT (user_id)
FROM users
WHERE
date_tk >= TO_CHAR(CURRENT_DATE - '30 days'::INTERVAL, 'yyyyMMdd')::INT

现在我将约束日期转换为 int,所以我假设它似乎没问题,但不幸的是事实并非如此。有人知道如何改进此查询以便仅扫描相关分区吗?

谢谢,迪迪

最佳答案

Postgres 不认为您使用的表达式是不可变的(出于同样的原因 now() 不是),因此 Postgres 在优化查找时不会使用它来考虑。加入一个额外的 where 子句,该子句在过去是常量且足够远。

或者,在分区时直接使用时间戳不是可以完全避免这个问题吗?

关于sql - PostgreSQL:仅扫描相关分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19446944/

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