[pgsql-jp: 40524] Re: ご質問m(_ _)m

Hiroki Kataoka kataoka @ interwiz.jp
2010年 11月 9日 (火) 22:44:43 JST


片岡です。

PostgreSQLはSQL文のパースがお世辞にも速いとは言えません。特に複雑長大なSQL文では顕著に遅いです。

Prepared Statementを使うのが順当な対策ですが、それが使いにくい構成(1度のセッションで1回しか呼ばないなど)の場合には、特に時間のかかるSQL文をSQL関数に仕立て、実行時にはそれを呼び出すようにしてみてください。パースの時間がかかる部分はCREATE
FUNCTIONの時点で済んでしまうので効果的です。

(多少なりともSQL関数を呼び出すオーバーヘッドがあるでしょうから、特に遅いSQL文だけをSQL関数にすることをお勧めします。)

2010年11月8日19:45 額田 正一郎 <kyu-0705 @ pstc.jp.panasonic.com>:
> どうも、PostgreSQLのSELECTの解析(パース)にて時間がかかっている
> ことがわかりました。
>
>  平均で500ミリ秒程度
>  バインド、実行には殆ど時間を要していません。
>  (0.10〜0.80ミリ秒)
>
> SELECTの解析(パース)に時間がかかると言うことはSQL文の
> 構成がまずいと言うことになるのでしょうか?
> (SQL文はOracle環境で動作していたものを
>  PostgreSQLで動作する様に修正をかけたもの)
>
> もし、環境設定等で対応することは可能なのでしょうか?

-- 
Hiroki Kataoka


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