我试图分析为什么某个查询需要相当长的时间。它在分区的 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,所以我认为它似乎没问题,但不幸的是它不是。有人知道如何改进此查询以便仅扫描相关分区吗?
谢谢,老爹