Oracle 的存储过程或函数提供了两种执行方式:

  • 解释执行:将源代码逐条转换成目标代码,解释一条,执行一条的过程。PLPGSQL将语句翻译成中间形式的系统代码,并在运行时进行解释。
  • 编译执行:将源代码一次性转换成目标代码,然后执行目标代码的过程。PLPGSQL将语句编译成动态库并存储在catalog中,运行时无须进行解释,运行速度更快。

KingbaseES plpgsql 通用也提供了编译执行方式,使得存储过程的执行效率大大提升。编译器只在第一次运行时进行编译,并加载到系统表 (pg_plpgsql_native_object)。我们来看以下例子:

1、创建存储过程

create or replace function caln( n integer ) returns bigint as $$
declare v_total bigint;
beginv_total :=0;for i in 1..n loopv_total := v_total + i;end loop;return v_total;
end;
$$ language plpgsql;

2、Postgresql 执行情况

testdb=# \timing on
Timing is on.
testdb=# select caln(10000000); caln
----------------50000005000000
(1 row)Time: 2000.733 ms (00:02.001)

3、KingbaseES 执行情况

正常情况下执行效率:

test=# \timing on
Timing is on.
test=# select caln(10000000);    caln
----------------50000005000000
(1 row)Time: 1954.474 ms (00:01.954)

启用编译执行:

test=# set plpgsql.enable_native_code=on;
SET
Time: 0.240 ms
test=# select caln(10000000);            caln
----------------50000005000000
(1 row)Time: 130.605 ms

4、对于执行大量SQL的效果

例子:

create or replace procedure proc01 as
$$
declarecnt integer;
beginfor i in 1..1000000 loopselect count(*) into cnt from t1;end loop;
end;
$$ language plpgsql

执行结果:

test=# call proc01();
CALL
Time: 6198.621 ms (00:06.199)
test=# set plpgsql.enable_native_code=on;
SET
Time: 0.529 ms
test=# call proc01();
CALL
Time: 304.246 ms

5、结论:

1、plpgsql 的编译执行会有很大的性能提升,特别是主要消耗在SQL解析上的SQL,对于大量时间消耗在SQL 执行上的过程,提升不大。

2、只适用于plpgsql,对于 plsql 无效。后续版本会支持plsql 编译执行。

plpgsql 编译执行相关推荐

  1. 金仓数据库KingbaseES plpgsql 编译执行

    目录 1.创建存储过程 2.Postgresql 执行情况 3.KingbaseES 执行情况 4.对于执行大量SQL的效果 5.结论: Oracle 的存储过程或函数提供了两种执行方式: 解释执行: ...

  2. c语言程序既可以编译执行也可以解释执行,2016年山东农业大学信息科学与工程学院C语言程序设计(同等学力加试)复试笔试仿真模拟题...

    一.选择题 1. 计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是 ( ). A.C 语言程序仅可以编译执行 B.C 语言程序仅可以解释执行 C.C 语言程序既可以编译执行,又 ...

  3. cmd编译java命令_使用CMD命令编译执行java命令

    写程序时,有时候需要动态编译执行,经过各种百度及实战,总结一些使用经验. .java文件分为有包名,无包名,又分为有jar包,无jar包,是否指定jre等等. 接下来总结如下: cmd 编译执行jav ...

  4. SQL Server 预编译执行SQLs

    问题描述: MVC5项目,利用执行sql的方式获取数据,但是在利用预编译执行的时候报错了,字段XXXwhich was not supplied. 其实就是这个参数传了个null导致的.在传参数之前做 ...

  5. “Java是编译执行的语言”这句话对吗?

    现在让你谈谈对Java平台的理解,你是否会感觉内容过于庞大?这个问题是比较宽泛的,Java发展到现在已经不仅仅是语言这么简单了,Java平台涉及的,包括但不仅限于下面提到的这些内容: Java语言本身 ...

  6. python是脚本语言、需要编译器编译执行_使用Notepad++编译运行C/C++/Python程序

    对我来说,比较常用的是C/C++/Python. 使用Notepad++编译运行单个源文件的C/C++/Python,比使用复杂的IDE更加快捷. 想要让Notepad++能够做到编译运行C/C++/ ...

  7. 第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++

    第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++ 准备代码: 第一次编译: 显然需要先配置环境变量: 先找到java.exe和javac.exe所在的文件夹位置: 此电脑-& ...

  8. JAVA 文件编译执行与虚拟机(JVM)简单介绍

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 ...

  9. linux c 多文件编译,Linuxc - 多c文件程序编译执行

    多文件使用,一起编译 定义max.h int max(int a,int b); 定义max.c #include "max.h" int max(int a,int b) { i ...

  10. go build 无文件_GO笔记之详解GO的编译执行流程

    上篇文章介绍了Golang在不同系统下的安装,并完成了经典的Hello World案例.在这个过程中,我们用到了go run命令,它完成源码从编译到执行的整个过程. 今天来详细介绍下这个过程.简单理解 ...

最新文章

  1. 【青少年编程】【蓝桥杯】水仙花数
  2. API接口自动化之2 处理http请求的返回体,对返回体做校验
  3. JAVA网站full GC监控脚本
  4. 智能车大赛AI视觉组参考答案
  5. jboss mysql cluster_为JBoss AS 7配置Mysql数据源
  6. 个人项目耗时对比记录表
  7. java中main函数的值是_java基础-main方法
  8. PCL之在Debian10下配置pcl.1.9.1
  9. Python之协程、异步IO、redis缓存、rabbitMQ队列
  10. python的快捷键总结
  11. 数据仓库 迁移 大数据_从数据仓库迁移到大数据平台的最佳实践
  12. Vue 腾讯防水墙验证
  13. 零基础学习大数据难不难?小白如何上手大数据?
  14. 【Python数据挖掘课程】八.关联规则挖掘及Apriori实现购物推荐
  15. FPGA学习之毛刺问题
  16. kubernetes 亲和、反亲和、污点、容忍
  17. NOI2006:金明的预算方案
  18. SQL面试题练习记录
  19. 快速傅立叶变换的C语言实现方法
  20. 最形象的卷积神经网络详解:从算法思想到编程实现(转载)

热门文章

  1. android存储登录用户名密码,AndroidStudio实现账号密码保存功能
  2. sl400上面安装ubuntu
  3. 不同内核浏览器的差异以及浏览器渲染简介
  4. C语言实现通讯录管理系统
  5. Cardhop for Mac(通讯录管理软件)
  6. android 电容屏(一):电容屏基本原理篇
  7. 电容屏物体识别_电容屏物体识别技术简介
  8. 基于时空图卷积网络预测交通流
  9. 微pe工具箱 系统安装教程_微PE工具箱安装系统教程(Win7或Win10)
  10. python从入门到精通资源库_[百度网盘]PYTHON从入门到精通全套资料 - 磁力点点