SYNOPSIS

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

DESCRIPTION 描述

PREPARE 创建一个已准备好的查询。 一个已准备好的查询是服务器端的对象,可以用于优化性能。 在执行 PREPARE 语句的时候,指定的查询被分析,重写以及规划。 当随后发出 EXECUTE 语句的时候, 已准备好的查询就只需要执行了。因此,分析,重写,以及规划阶段都只执行一次,而不是每次查询执行的时候都要执行一次。

准备好的查询可以接受参数:在它执行的时候替换到查询中的数值。 要给一个准备好的查询声明参数,我们需要在 PREPARE 语句里包含一个数据类型的列表。在查询本身里,你可以按照位置来引用这些参数, 比如 $1,$2,等。 在执行查询的时候,在 EXECUTE 语句里为这些参数声明实际的数值。 参考 EXECUTE [execute(7)] 获取更多信息。

准备好的查询是在本地存储的(在当前后端里),并且只是在当前数据库会话的过程中存在。 如果客户端退出,那么准备好的查询就会被遗忘,因此我们必须在被重新使用之前重新创建。 这也意味着一个准备好的查询不能被多个同时的数据库客户端使用; 但是,每个客户端可以创建它们自己的已准备好的查询来使用。

如果一个会话准备用于执行大量类似的查询,那么已准备好的查询可以获得最大限度的性能优势。 如果查询非常复杂,需要复杂的规划或者重写,那么性能差距将非常明显。 比如,如果查询设计许多表的连接,或者有多种规则要求应用。如果查询的规划和重写相对简单, 而执行起来开销相当大,那么已准备好的查询的性能优势就不那么明显。

PARAMETERS 参数

plan_name
给予这个特定的已准备好查询的任意名字。它必须在一个会话中是唯一的, 并且用于执行或者删除一个前面准备好的查询。
datatype
已准备好查询的某个参数的数据类型。要在已准备好查询内部引用这个参数,使用 $1,$2,等。
statement
任何 SELECT, INSERT, UPDATE, 或 DELETE 语句。

NOTES 注意

在一些情况下,PostgreSQL 为一个已准备好的查询生成的查询规划可能还不如按照普通方法提交并执行的查询生成的规划好。 这是因为该查询在被规划的时候(也是优化器视图判断最优查询规划的时候), 在查询中声明的任何参数的实际数值都还不可见。 PostgreSQL 在表中收集数据分布的统计, 而且可以利用查询中的常量来猜测执行查询的可能结果。 因为这些数据在准备哪种带参数的查询的规划的时候还不可得, 所以,选出来得规划可能是次好的。 要检查 PostgreSQL 为已准备好的查询选取的查询计划, 使用 EXPLAIN EXECUTE

PREPARE - 创建一个准备好的查询的更多相关文章

  1. EXECUTE - 执行一个准备好的查询

    SYNOPSIS EXECUTE plan_name [ (parameter [, ...] ) ] DESCRIPTION 描述 EXECUTE 用于执行一个前面准备好的语句. 因为一个准备好的查 ...

  2. DEALLOCATE - 删除一个准备好的查询

    SYNOPSIS DEALLOCATE [ PREPARE ] plan_name DESCRIPTION 描述 DEALLOCATE 用于删除前面准备好的查询. 如果你没有明确 DEALLOCATE ...

  3. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(三)(错误整理篇)

    使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二) 以上两篇已经把流 ...

  4. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二)(代码篇)

    这篇是上一篇的延续: 用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 源代码在github上可以下载,地址:https://github.com/guoxia ...

  5. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)

    梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查 ...

  6. sqlsever 创建一个通用分页查询

    -- Author: Mis Chen-- Create date: 2018年5月15日 11:21:47-- Description: 创建一个通用分页查询-- ================= ...

  7. 如何用 React Native 创建一个iOS APP?(三)

    前两部分,<如何用 React Native 创建一个iOS APP?>,<如何用 React Native 创建一个iOS APP (二)?>中,我们分别讲了用 React ...

  8. CREATE TABLE AS - 从一条查询的结果中创建一个新表

    SYNOPSIS CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name [ (column_name [, ...] ...

  9. 当进行数据查询时候 要考虑创建一个model ;具备传入与输出的字段

    当进行数据查询时候 要考虑创建一个model ;具备传入与输出的字段

随机推荐

  1. ios input readonly失效(点击的时候会有光标出现)/禁止输入法弹出问题

    苹果端用1,2,之后解决不了readonly失效问题(点击的时候会有光标出现)(且不方便用disabled的时候),就用3, 1,    $("#appDateTime").foc ...

  2. (26)Python获取某个文件存放的相对路径(更改任意目录下保持不变)

    import os import platform def getSeparator(): ''' 获取不同平台下的斜杠符号 :return: Created by Wu Yongcong 2017- ...

  3. 730KII 打印机 Win7 2017年11月更新系统补丁后无法打印

    卸载11月份编号为KB4048960的系统更新

  4. PS4 Submission

    第一部分是param.sfo文件的设置: 另外,sce_sys目录下的icon0.png文件和pic1.png文件也可以手动修改成自己需要的样式,前者是在游戏中的logo,图片要求是512x512,p ...

  5. 版本基线自动化之windows

    1.背景: 目前项目维护周期过程中,制作调试版本和对外发布版本次数比较频繁,流程过于繁琐和随意,且打包制作人成为瓶颈,为了规范版本基线流程和实现全员自动化参与,拟定版本基线自动化方案. 2.目标: 版 ...

  6. 使用ZeroTier搭建大局域网利用VNC远程桌面

    ZeroTier One.msi VNC Server 6.4.1 VNC Viewer 6.19.325 Network ID 83048a0632e88e16

  7. 测开之路九十一:css常用的选择器

    一:全局选择器:* 二:标签选择器,如给所有p标签加个背景色 三:id选择器:# ,如给id为id_01的元素加一个框 四:类选择器:. 如设置一个类选择器为blue,当有标签引用blue的时候,背景 ...

  8. fillna()函数

    method:  pad/ffill:用前一个非缺失值去填充该缺失值,用左边的非缺失值去填充该缺失值          backfill/bfill:用下一个非缺失值填充该缺失值,用右边的非缺失值去填 ...

  9. axios 拦截以及 API简单配置(element)

    在某些情况下,有时候会在接口请求的API中需要拿到存在浏览器中的COOKIE,调用的方式可以为: // 获取浏览器Cookie function getCookie(cname) { var name ...

  10. C#线程中安全访问控件(重用委托,避免繁复的delegate,Invoke)总结

    1.第一种,不安全,当线程过多后,timer控件和线程中同时访问窗体控件时,有时会出现界面重绘出错. public frmMain() { InitializeComponent(); System. ...