zoukankan      html  css  js  c++  java
  • PostgreSQL prepare的使用

    prepare的使用:

    众所周知,在执行一个SQL时,首先生成执行计划(进行语义分析、词法解析、逻辑优化、物理优化)、执行、结果传输等操作。
    如果一个SQL在应用中反复使用,我们可以将此SQL参数化,只做一次prepare,后面执行时就不需要进行前面执行计划的生成操作,直接使用prepare好的执行计划。

    对于比较长的SQL、参数较固定的SQL,可以使用prepare,下面做个简单的举例:

    特点:
    1) Prepared语句只在session的整个生命周期中存在,一旦session结束,Prepared语句也不存在了。如果下次再使用需重新创建。
    2) Prepared语句不能在多个并发的client中共有。
    3) prepared语句可以通过DEALLOCATE命令清除。
    4) 当前session的prepared语句:pg_prepared_statements

    1.在存储过程中使用:

    DO
    $$
    DECLARE 
    ret_ref refcursor;
    one_row record;
    BEGIN 
    PREPARE test_pre(int, text) AS INSERT INTO test values($1, $2);	
    --EXECUTE test_pre(1, 'test_pre'); --如果不用execute包一层,会认为是个函数,会报错,要用下面的
    EXECUTE 'EXECUTE test_pre(1, ''test_pre'')';
    DEALLOCATE PREPARE test_pre;
    
    OPEN ret_ref FOR SELECT * FROM test;
    
    FETCH ret_ref INTO one_row;
    WHILE ret_ref%FOUND LOOP
    raise notice 'id is: %, text is: %', one_row.id, one_row.text;
    FETCH NEXT IN ret_ref INTO one_row;
    END LOOP;
    
    CLOSE ret_ref;
    --truncate test;
    END 
    $$
    

      


    2.在客户端上使用:
    --可以在管理工具、命令行工具直接使用,session级别生效:

    PREPARE test_pre1(int, text) AS INSERT INTO test values($1, $2);
    EXECUTE test_pre1(1, 'test_pre');
    
    SELECT * FROM test;
    

      

    3.在ECPG、JAVA、.NET中都可以先对反复执行的,只有参数变化的SQL先进行prepare,提高效率。

  • 相关阅读:
    09.安装Collabora Online服务
    08.nextcloud搭建
    07.安装及使用gitlub
    winmerge vs2010
    C#中时间计算汇总
    JS正则表达式大全 转
    js 验证正则
    js验证大全
    CSC 命令编译cs文件
    网站PV、UV以及查看方法(转)
  • 原文地址:https://www.cnblogs.com/kuang17/p/14005372.html
Copyright © 2011-2022 走看看