PostgreSQL 通过Prepare语句进行软解析

Prepare语句进行软解析
 
在PostgreSQL中,同一个session的所有SQL statements都要进行一遍parse,rewrite,plan的过程。即使在当前语句之前已经执行过相同的语句,也需要重新解析。
 
PostgreSQL通过Prepare语句来解决同一session中软解析的问题。
 
一、Prepare原理
1.创建一个server-side的prepare对象。
2.当第一次execute时,他会parsed, rewritten, 以及planned.
3.以后再execute时,就直接执行,不再进行上面的3个动作。
 
二、适用情况(在以下情况下使用性能会有很大提升)
1、在同一个session中执行大量的相同或相似的语句。
2、并且语句非常复杂(如join很多表,查询的SQL几百行等),这些在plan和rewrite的时候会非常费时。
总体来说在复杂的查询分析中比较适合。
 
三、不适用情况
如果在plan和rewrite的时候简单,但执行的时候非常耗费资源,则不适用
(比如update tb1 set aa='1' where id>10,这一句在plan的时候会非常容易,但如果执行的时候涉及到10w条记录,则执行会非常消耗资源,这就属于这种不适用的情况。)
 
四、Notes
1、Prepared语句只在session的整个生命周期中存在,一旦session结束,Prepared语句也不存在了。如果下次再使用需重新创建。
2、Prepared语句不能在多个并发的client中共有。
3、prepared语句可以通过 DEALLOCATE命令清除。
4、查看当前session的prepared语句:pg_prepared_statements
 
五、测试实例
 
  
 
 
edb=# select * from pg_prepared_statements;
-[ RECORD 1 ]---+-----------------------------------------------------------------------
name                    | select_emp22
statement            | prepare select_emp22(int) as  select * from emp_test where e_empno=$1;
prepare_time      | 08-APR-10 17:05:56.28125 +08:00
parameter_types | {integer}
from_sql                | t
 
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21778816/viewspace-631631/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21778816/viewspace-631631/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值