4

次のような準備済みステートメントがあるとします。

SELECT my_func($1::text, $2::int)

この呼び出しでステートメントを準備し、準備されたステートメントを介して呼び出しを行うと、速度が向上しますか?

4

1 に答える 1

3

ここでドキュメントを引用させてください:

プリペアドステートメントは、単一のセッションを使用して多数の同様のステートメントを実行する場合に、パフォーマンス上の最大の利点があります。パフォーマンスの違いは、ステートメントの計画や書き換えが複雑な場合、たとえば、クエリに多数のテーブルの結合が含まれる場合や、複数のルールの適用が必要な場合に特に重要になります。ステートメントの計画と書き換えが比較的簡単であるが、実行に比較的費用がかかる場合、プリペアドステートメントのパフォーマンス上の利点はあまり目立たなくなります。

強調するのは私のものです。PREPAREどの条件がメリットをもたらすかを明確に示していると思います。

それでも、現在すべての言語がステートメントを準備するためのネイティブな方法(PHPなど)を提供しているため、全体的な機械は舞台裏で実行されます。

短くするには:

  • クライアントからのワンタイムの場合は、直接実行します。
  • それがアプリケーションからのものであり、ユーザー入力を想定している場合は、プラットフォームとその機能を使用してセキュリティ上の理由から準備します。
  • ステートメントがセッション内で何度も実行される場合はPREPARE、パフォーマンス上の理由から、任意の手段(またはプラットフォームの機能)を使用して準備してください。
于 2013-02-08T09:00:49.393 に答える