Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

PREPARE

准备语句以便执行。

PREPARE 会创建一个预编译语句。在执行 PREPARE 语句时,会对指定的语句(SELECT、INSERT、UPDATE 或 DELETE)进行解析、重写和计划。接下来为预编译语句发出 EXECUTE 命令时,Amazon Redshift 可能会选择修改查询执行计划(以便根据指定参数值来提高性能),然后再执行预编译语句。

语法

Copy
PREPARE plan_name [ (datatype [, ...] ) ] AS statement

参数

plan_name

为此特定预编译语句指定的任意名称。它在单个会话中必须是唯一的,随后用于执行或取消分配先前预编译的语句。

datatype

预编译语句的参数的数据类型。要在预编译语句自身中引用参数,请使用 $1、$2 等等。

statement

任意 SELECT、INSERT、UPDATE 或 DELETE 语句。

使用说明

预编译语句可以接受参数和值,它们在执行语句时将会被取代。要在预编译语句中包含参数,请在 PREPARE 语句中提供数据类型的列表;并在要预编译的语句自身中,通过使用 $1, $2, ... 表示法来按位置引用参数。执行该语句时,会在 EXECUTE 语句中为这些参数指定实际值。有关更多信息,请参阅 EXECUTE

预编译语句只在当前会话的持续时间内有效。当会话结束时,预编译语句将被丢弃,因此必须重新创建该语句才能再次使用。这也意味着一个预编译语句不能同时由多个数据库客户端使用;不过,每个客户端可以创建自己的预编译语句加以使用。可以使用 DEALLOCATE 命令手动删除预编译语句。

当一个会话用于执行大量类似的语句时,预编译语句能够发挥最大的性能优势。正如上文所述,对于预编译语句的每次新执行,Amazon Redshift 可能会根据指定的参数值,再次修改查询执行计划来提高性能。要检查 Amazon Redshift 为任何特定 EXECUTE 语句选择的查询执行计划,请使用 EXPLAIN 命令。

有关查询计划的更多信息以及 Amazon Redshift 为查询优化收集的统计数据,请参阅 ANALYZE 命令。

示例

创建一个临时表,准备 INSERT 语句并执行该语句:

Copy
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 语句并执行该语句:

Copy
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;

另请参阅

DEALLOCATEEXECUTE