2

特定のクエリに非常に長い時間がかかる理由を分析しようとしました。パーティション分割された 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 にキャストしたので、問題ないように思えますが、残念ながらそうではありません。関連するパーティションのみがスキャンされるように、このクエリを改善する方法を誰かが考えていますか?

ありがとう、ディディ

4

1 に答える 1