実行用のステートメントを準備します。
PREPARE によって、準備済みステートメントが作成されます。PREPARE ステートメントを実行すると、指定されたステートメント (SELECT、INSERT、UPDATE、または DELETE) が解析、再出力、および計画されます。準備済みステートメントに対して EXECUTE コマンドを発行すると、Amazon Redshift は (指定したパラメータ値に基づいてパフォーマンスを改善するように) 必要に応じてクエリ実行計画を修正してから、その準備済みステートメントを実行することがあります。
構文
PREPARE plan_name [ (datatype [, ...] ) ] AS statement
パラメータ
- plan_name
-
この特定の準備済みステートメントに付けられた任意の名前。この名前は単一セッション内で一意でなければならず、以降は事前に準備済みのステートメントの実行、またはその割当解除に使われます。
- datatype
-
準備済みステートメントに対するパラメータのデータ型。準備済みステートメント自体のパラメータを参照するには、$1、$2 など (最大 $32767) を使用します。
- statement
-
SELECT、INSERT、UPDATE または DELETE の任意のステートメント。
使用に関する注意事項
準備済みステートメントでは、パラメータ (ステートメントの実行時にステートメントに代入される値) を使用できます。準備済みステートメントにパラメータを含めるには、PREPARE ステートメントにデータ型のリストを提供し、準備するステートメント自体で、$1、$2 などの表記を使って位置によりパラメータを参照します。パラメータの最大数は 32767 です。このステートメントを実行する際に、EXECUTE ステートメントでこれらのパラメータの実際の値を指定します。詳細については、「EXECUTE」を参照してください。
準備済みステートメントは、現在のセッションの有効期間中のみ有効です。セッションが終了すると、準備済みステートメントは破棄されるため、再使用する場合は、作り直す必要があります。これは、単一の準備済みステートメントを複数の同時データベースクライアントで使用することはできないことも意味します。ただし、各クライアントは独自の準備済みステートメントを作成して使用することができます。準備済みステートメントは、DEALLOCATE コマンドを使って、手動で削除できます。
単一のセッションを使用して多数の類似したステートメントを実行する場合に、準備済みステートメントは、パフォーマンス面での最大のメリットをもたらします。前述したように、準備済みステートメントを新たに実行するたびに、Amazon Redshift は指定されたパラメータ値に基づいてパフォーマンスを向上させるため、クエリの実行計画を修正することがあります。Amazon Redshift が特定の EXECUTE ステートメントに選択したクエリ実行計画を確認するには、EXPLAIN コマンドを使用します。
クエリの計画と、クエリの最適化のために Amazon Redshift が収集した統計情報の詳細については、「ANALYZE コマンド」を参照してください。
例
一時テーブルを作成し、INSERT ステートメントを準備した上でそれを実行します。
DROP TABLE IF EXISTS prep1;
CREATE TABLE prep1 (c1 int, c2 char(20));
PREPARE prep_insert_plan (int, char)
AS insert into prep1 values ($1, $2);
EXECUTE prep_insert_plan (1, 'one');
EXECUTE prep_insert_plan (2, 'two');
EXECUTE prep_insert_plan (3, 'three');
DEALLOCATE prep_insert_plan;
SELECT ステートメントを準備して実行します。
PREPARE prep_select_plan (int)
AS select * from prep1 where c1 = $1;
EXECUTE prep_select_plan (2);
EXECUTE prep_select_plan (3);
DEALLOCATE prep_select_plan;