↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3
历史版本PostgreSQL 7.4 已于 2010 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

PREPARE

PREPARE — 为执行准备一个语句

大纲

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

描述

PREPARE 创建一个预备语句。预备语句是一种可用于优化性能的服务器端对象。执行 PREPARE 语句时,指定的语句会被解析、重写和规划。随后对预备语句发出 EXECUTE 命令时,只需执行该预备语句即可。这样,解析、重写和规划阶段只执行一次,而不是每次执行语句时都进行。

预备语句可以带参数,也就是在执行时会代入语句中的值。要在预备语句中 使用参数,需要在PREPARE语句中提供一个数据类型列表, 并在被预备的语句本身中,使用$1、$2 等按位置引用这些参数。执行该语句时,需要在 EXECUTE语句中为这些参数指定实际值。有关详情,参见 EXECUTE。

预备语句只在当前数据库会话期间存储并存在。当 会话结束时,预备语句就被遗忘,因此再次 使用之前必须重新创建它。这也意味着单条 预备语句不能被多个同时的数据库客户端 使用;不过,每个客户端都可以创建自己的 预备语句来使用。

当单个会话要执行大量相似语句时,预备语句能带来最大的性能优势。如果 语句在规划或重写时比较复杂,例如查询涉及许多表的连接,或者需要应用多条 规则,那么这种性能差异会特别明显。如果语句相对容易规划和重写,但执行本 身代价较高,则预备语句带来的性能优势就不那么明显。

参数

plan_name

为这个特定预备语句指定的任意名称。它在单个会话内必须唯一,随后用于执 行或释放先前已准备的语句。

datatype

预备语句中某个参数的数据类型。要在预备语句本身中引用参数,可使用 $1、$2 等。

statement

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

注解

在某些情况下,为预备语句生成的查询计划 可能劣于正常提交并执行该语句时 生成的计划。这是因为在对语句做规划 且规划器试图确定最优查询计划时,语句中 指定的任何参数的实际值都 不可用。PostgreSQL 收集 表中数据分布的统计信息,并可以利用 语句中的常量值来猜测执行该语句的 可能结果。由于带参数的预备语句在规划时 这些数据不可用,所选的计划 可能是次优的。要查看 PostgreSQL 为预备语句选择的 查询计划,可以使用 EXPLAIN EXECUTE。

有关查询规划以及 PostgreSQL 为此收集的统计 信息的更多内容,请参见ANALYZE文档。

兼容性

SQL 标准包含PREPARE语句,但它只用于嵌入式 SQL。这里的PREPARE语句在语法上也略有不同。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。