[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 メーリングリストの案内