[pgsql-jp: 34280] Re: 日付/ 時刻データ型の比較とパフォーマンス

TANIDA Yutaka tanida @ sra.co.jp
2004年 11月 16日 (火) 16:44:10 JST


谷田です。

On Tue, 16 Nov 2004 16:14:55 +0900
Takanori Oba <oba @ uchida.co.jp> wrote:

> EXPLAIN ANALYZE の結果では、日付/時間データ型の比較におけるキャストの
> 回数・仕方がパフォーマンスに影響を与えていると推測できます。
> テーブルサイズを数十〜数百万件にしてみると、その性能の差がかなり顕著に
> 出ます。
> 
> ■ WHERE hoge = 'now' の場合
> Filter: (hoge = '今日の日付'::timestamp without time zone)
> 
> ■ WHERE hoge = CURRENT_DATE の場合
> Filter: (hoge = (('now'::text)::date)::timestamp without time zone))
> 
> ■ WHERE hoge = CURRENT_TIMESTAMP の場合
> Filter: ((hoge)::timestamp with time zone = ('now'::text)::timestamp(6)
> with time zone)
> 
> ■ WHERE hoge = CURRENT_TIME の場合
> Filter: ((hoge)::text = (('now'::text)::time(6) with time zone)::text)
(snip)

> ここで質問なのですが、このような現象は一般的な(或いは既知の)現象なの
> でしょうか?
> 私が探した限りでは、マニュアルにはこのような現象の説明が載っていなかった
> と思うのですが。

既知の現象です。というのも、結局のところキャストを行うことの手間が発生す
るからです。詳細については、timestamp型の説明と、current_timestampなどの
説明を見て、キャスト関係がどうなるかexplain analyzeとにらめっこしてみる
ことをおすすめします。

# current_timestamp は 7.3から timestamp *with* time zoneです。now()もか
な?

'now'の場合だけ、事前に現在日付に置き換えられるので早くなってます。

> またはPostgreSQLのバージョンによっても結果が違うのでしょうか。

そうですね、実際異なるバージョンもあると思います。


-- 
TANIDA Yutaka <tanida @ sra.co.jp>




pgsql-jp メーリングリストの案内