[pgsql-jp: 39915] Re: 1 回目のUPDATEが異常に遅い

Itagaki Takahiro itagaki.takahiro @ oss.ntt.co.jp
2009年 7月 8日 (水) 17:54:03 JST


Shimada.Hirokazu @ toshiba-sol.co.jp wrote:

> > 「列::date = NOW()::timestamp」の比較だと、date → timestamp の
> > 変換が優先されるので、インデックスが使われません。
> 
> NOW()はtimestamptz型で、date型やtimestamp型とではindexが利用されないようでした。
> ちなみに「timestamp型=date型」の場合は、なぜかindexが利用されました。

一部例外もありますが、インデックスが使われるかどうかは、
↓のような法則があります。キャストも関数だと考えてください。

                                 インデックスが...
  パターン1 : 列 = 定数       → 使われる。
  パターン2 : 列 = 関数(定数) → 使われる。「関数(定数)」の結果は定数なので。
  パターン3 : 関数(列) = 定数 → 使われない。

自動キャストは、パターン3 の状態になりやすいので、扱いづらい機能です。
結果自体は正しいので、データ量が少ないと見逃す可能性がありますし…。

# 「自動キャストのためにインデックスが使えない場合は WARNING をあげる」
# なんていうオプションがあると嬉しいのですけど ;-)

------------------------------------------------------------
NTT オープンソース ソフトウェア センタ
板垣貴裕 <itagaki.takahiro @ oss.ntt.co.jp>





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