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,提高效率。

  • 相关阅读:
    第一次个人作业-热身
    OO总结
    oo第三单元总结
    oo第二单元总结
    软件工程 —— 课程回顾与个人总结
    BUAA软件案例分析——智能表单抽取识别
    软件工程—结对项目博客
    轨迹预测文献阅读整理(轨迹多样性、车辆轨迹、图神经网络、潜码)
    软件工程
    软件工程
  • 原文地址:https://www.cnblogs.com/kuang17/p/14005372.html
Copyright © 2011-2022 走看看