0

2 つの異なるリクエストで同じクエリを実行したい場合、Doctrine2 で準備済みステートメントを使用します... 準備済みステートメントは初回のみ送信され、しばらくの間データベースに保存されますか? それとも、各スクリプトの終了後に削除されますか?

4

1 に答える 1

3

PostgreSQL では、準備されたステートメントはセッションの最後までのみ有効であり、メモリに保存されず、多くのセッション間で共有されません。ドキュメントを参照してください: http://www.postgresql.org/docs/9.2/static/sql-prepare. html

プリペアド ステートメントは、現在のデータベース セッションの間だけ存続します。セッションが終了すると、準備されたステートメントは忘れられるため、再度使用する前に再作成する必要があります。これは、1 つのプリペアド ステートメントを同時に複数のデータベース クライアントで使用できないことも意味します。ただし、各クライアントは、使用する独自の準備済みステートメントを作成できます。



ただし、PostgreSQL は、将来の再利用のために、このクエリのプランをメモリに保存する場合がある (ただし、保存する必要はない) とも述べています。

準備されたステートメントが十分な回数実行されると、サーバーは最終的に、毎回再計画するのではなく、一般的な計画を保存して再利用することを決定する場合があります。準備されたステートメントにパラメーターがない場合、これはすぐに発生します。それ以外の場合は、一般的なプランが特定のパラメーター値に依存するプランよりもそれほど高価ではないように見える場合にのみ発生します。通常、クエリのパフォーマンスが指定された特定のパラメーター値にほとんど影響されないと推定される場合にのみ、一般的なプランが選択されます。

PostgreSQL が準備済みステートメントに使用しているクエリ プランを調べるには、EXPLAIN を使用します。ジェネリック プランが使用されている場合、パラメータ シンボル $n が含まれますが、カスタム プランには現在の実際のパラメータ値が代入されます。

于 2013-08-09T22:52:57.753 に答える