by Hayato Matsuura.

明確な計画


PostgreSQLは、共有のクエリ実行計画キャッシュを持っていませんが、 プリペアドステートメントではオプションとしてクエリ実行計画キャッシュを使用できます。これにより、 プリペアドステートメントをクエリ計画キャッシュありで使うかなしで使うかを開発者が選択できます。ただし、プリペアドステートメントをクローズすると キャッシュは削除されてしまう点に注意しましょう。

各言語でこの機能を使う方法は次の通りです。

C

ネイティブなC APIでは、PQexecParamsという、 プリペア時にバインドパラメータを使用できる機能が提供されています (PQprepareと対応)。

Java

The PostgreSQLのJDBCドライバは、PGStatement 及びPGConnectionの 標準にはないメソッドであるsetPrepareThresholdを使ってサーバサイドプリペアを 制御します。

デフォルト設定は、最初の4回の実行ではプリペア時にバインドパラメータを使い、 最後の1回は使わないという、5になっています。カウンタは PreparedStatementごとに新しく0から始まります。

警告

PreparedStatementキャッシュを使うフレームワークは たくさんあり、データソースのセットアップ時に prepared-statement-cache-sizeで設定できます。 そのため、意図せず制限に引っ掛かる事もあり得ます。

Ruby

RubyのPGconn.execは、 オプション引数としてバインドパラメータを受け入れます。 バインドパラメータが渡された場合は、計画の際にそれが使われます。

著者について

Markus Winandの写真

Markus Winand氏は、開発者がSQLパフォーマンスを改善するお手伝いをしています。彼は、SQL Performance Explainedの 著者でもあり、出張トレーニングhttp://winand.at/での リモート講義も 行っています。

彼の本

カバー『SQLパフォーマンス詳解』

核心をわかりやすく 解説。

Markusから購入します
(送料無料+PDF)

Amazonで購入
(印刷版のみ)

“Use The Index, Luke!” by Markus Winand is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
法律上の通知 | 接触 | 無保証 | 商標 | Privacy | CC-BY-NC-ND 3.0 license