特定のクエリに非常に長い時間がかかる理由を分析しようとしました。パーティション分割された PostgreSQL (v9.1) テーブルで実行されます。月ごとに区切られています。このルールは、日付の整数表現を保持する列に基づいています (例では 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 にキャストしたので、問題ないように思えますが、残念ながらそうではありません。関連するパーティションのみがスキャンされるように、このクエリを改善する方法を誰かが考えていますか?
ありがとう、ディディ