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で購入
(印刷版のみ)

Do not use offset for pagination

Learn why

Visit my sibling!A lot changed since SQL-92!

Use The Index, Luke のカップは

ステッカー、コースター、本、コーヒーマグ。 学習に必要なものすべて。

今すぐ購入

Connect with Markus Winand

Markus Winand on LinkedInMarkus Winand on XINGMarkus Winand on Twitter
“Use The Index, Luke!” by Markus Winand is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
法律上の通知 | お問い合わせ | 無保証 | 商標 | プライバシーとGDPR | CC-BY-NC-ND 3.0 license