plpgsql 编译执行
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 编译执行相关推荐
- 金仓数据库KingbaseES plpgsql 编译执行
目录 1.创建存储过程 2.Postgresql 执行情况 3.KingbaseES 执行情况 4.对于执行大量SQL的效果 5.结论: Oracle 的存储过程或函数提供了两种执行方式: 解释执行: ...
- c语言程序既可以编译执行也可以解释执行,2016年山东农业大学信息科学与工程学院C语言程序设计(同等学力加试)复试笔试仿真模拟题...
一.选择题 1. 计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是 ( ). A.C 语言程序仅可以编译执行 B.C 语言程序仅可以解释执行 C.C 语言程序既可以编译执行,又 ...
- cmd编译java命令_使用CMD命令编译执行java命令
写程序时,有时候需要动态编译执行,经过各种百度及实战,总结一些使用经验. .java文件分为有包名,无包名,又分为有jar包,无jar包,是否指定jre等等. 接下来总结如下: cmd 编译执行jav ...
- SQL Server 预编译执行SQLs
问题描述: MVC5项目,利用执行sql的方式获取数据,但是在利用预编译执行的时候报错了,字段XXXwhich was not supplied. 其实就是这个参数传了个null导致的.在传参数之前做 ...
- “Java是编译执行的语言”这句话对吗?
现在让你谈谈对Java平台的理解,你是否会感觉内容过于庞大?这个问题是比较宽泛的,Java发展到现在已经不仅仅是语言这么简单了,Java平台涉及的,包括但不仅限于下面提到的这些内容: Java语言本身 ...
- python是脚本语言、需要编译器编译执行_使用Notepad++编译运行C/C++/Python程序
对我来说,比较常用的是C/C++/Python. 使用Notepad++编译运行单个源文件的C/C++/Python,比使用复杂的IDE更加快捷. 想要让Notepad++能够做到编译运行C/C++/ ...
- 第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++
第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++ 准备代码: 第一次编译: 显然需要先配置环境变量: 先找到java.exe和javac.exe所在的文件夹位置: 此电脑-& ...
- JAVA 文件编译执行与虚拟机(JVM)简单介绍
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 ...
- linux c 多文件编译,Linuxc - 多c文件程序编译执行
多文件使用,一起编译 定义max.h int max(int a,int b); 定义max.c #include "max.h" int max(int a,int b) { i ...
- go build 无文件_GO笔记之详解GO的编译执行流程
上篇文章介绍了Golang在不同系统下的安装,并完成了经典的Hello World案例.在这个过程中,我们用到了go run命令,它完成源码从编译到执行的整个过程. 今天来详细介绍下这个过程.简单理解 ...
最新文章
- 【青少年编程】【蓝桥杯】水仙花数
- API接口自动化之2 处理http请求的返回体,对返回体做校验
- JAVA网站full GC监控脚本
- 智能车大赛AI视觉组参考答案
- jboss mysql cluster_为JBoss AS 7配置Mysql数据源
- 个人项目耗时对比记录表
- java中main函数的值是_java基础-main方法
- PCL之在Debian10下配置pcl.1.9.1
- Python之协程、异步IO、redis缓存、rabbitMQ队列
- python的快捷键总结
- 数据仓库 迁移 大数据_从数据仓库迁移到大数据平台的最佳实践
- Vue 腾讯防水墙验证
- 零基础学习大数据难不难?小白如何上手大数据?
- 【Python数据挖掘课程】八.关联规则挖掘及Apriori实现购物推荐
- FPGA学习之毛刺问题
- kubernetes 亲和、反亲和、污点、容忍
- NOI2006:金明的预算方案
- SQL面试题练习记录
- 快速傅立叶变换的C语言实现方法
- 最形象的卷积神经网络详解:从算法思想到编程实现(转载)
热门文章
- android存储登录用户名密码,AndroidStudio实现账号密码保存功能
- sl400上面安装ubuntu
- 不同内核浏览器的差异以及浏览器渲染简介
- C语言实现通讯录管理系统
- Cardhop for Mac(通讯录管理软件)
- android 电容屏(一):电容屏基本原理篇
- 电容屏物体识别_电容屏物体识别技术简介
- 基于时空图卷积网络预测交通流
- 微pe工具箱 系统安装教程_微PE工具箱安装系统教程(Win7或Win10)
- python从入门到精通资源库_[百度网盘]PYTHON从入门到精通全套资料 - 磁力点点