楼主: glasswing

大家省省吧,都是在PostgreSQL上改改敢自称自主知识产权

[复制链接]
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
61#
发表于 2012-11-3 18:25 | 只看该作者
把递归改为循环就看不出差距了
SQL> create or replace function f2(x integer) return integer as
2    a integer;
3    b integer;
4    s integer;
5    begin
6    a :=1;
7    b :=1;
8    s :=0;
9      if x <= 2 then
10       return 1;
11     end if;
12     for i in 3..x loop
13     if mod(i, 2)= 1 then
14     a :=a+b;
15     s :=a;
16     else
17     b :=a+b;
18     s :=b;
19     end if;
20     end loop;
21     return s;
22   end;

Use time:31 ms.
ok.


SQL> select f2(30);

Use time:0 ms.

EXPR1(INTEGER)  |

-------------------------------------L1-------------------------------------
832040 |

Total 1 records.


SQL> select f2(40);

Use time:0 ms.

EXPR1(INTEGER)  |

-------------------------------------L1-------------------------------------
102334155 |

Total 1 records.


SQL> select f2(42);

Use time:0 ms.

EXPR1(INTEGER)  |

-------------------------------------L1-------------------------------------
267914296 |

Total 1 records.


SQL>
~~~~~~~~~~~~~~~~
SQL>create or replace function f2(x integer) return integer as
2   a int=1;
3   b int=1;
4   s int=0;
5   begin
6     if x <= 2 then
7       return 1;
8     end if;
9     for i in 3..x loop
10    if mod(i, 2)= 1 then
11    a:=a+b;
12    s:=a;
13    else
14    b:=a+b;
15    s:=b;
16    end if;
17    end loop;
18    return s;
19  end;
20  /
操作已执行
已用时间: 161.458(ms) clock tick:0. Execute id is 19.

SQL>select f2(30);

行号       f2(30)
---------- ----------
1          832040

已用时间: 1.208(ms) clock tick:0. Execute id is 20.
SQL>select f2(40);

行号       f2(40)
---------- ----------
1          102334155

已用时间: 0.875(ms) clock tick:0. Execute id is 23.

SQL>select f2(42);

行号       f2(42)
---------- ----------
1          267914296

已用时间: 0.867(ms) clock tick:0. Execute id is 24.

SQL>

使用道具 举报

回复
论坛徽章:
6
2012新春纪念徽章
日期:2012-01-04 11:53:292013年新春福章
日期:2013-02-25 14:51:24林肯
日期:2013-09-12 15:57:33优秀写手
日期:2013-12-18 09:29:09慢羊羊
日期:2015-03-04 14:51:352015年新春福章
日期:2015-03-06 11:57:31
62#
发表于 2012-11-4 08:44 | 只看该作者
这个递归函数的性能, dm7与dm6相比,确实略有退步,主要原因是dm7采用了类似JAVA虚拟机的异常表, 还有为了支持脚本的调试, 每一次调用都显式创建了栈帧与表达式值栈, 代价相对比较大。

目前这个函数性能与oracle相比大致相当,后面会继续改进。



使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
63#
发表于 2012-11-5 19:14 | 只看该作者
pkmonster 发表于 2012-11-4 08:44
这个递归函数的性能, dm7与dm6相比,确实略有退步,主要原因是dm7采用了类似JAVA虚拟机的异常表, 还有为了支持 ...

linux上的dm7
SQL>conn sysdba/sysdba
conn sysdba/sysdba

服务器[LOCALHOST:5236]:处于普通打开状态
使用普通用户登录

登录使用时间 :3.820(ms)
SQL>create function f1(x integer) return integer as
create function f1(x integer) return integer as
2   begin
3     if x <= 2 then
4       return 1;
5     end if;
6     return f1(x - 1) + f1(x - 2);
7   end;
8   /
操作已执行
已用时间: 5.239(ms).Execute id is 521.

SQL>select f1(30) from dual;
select f1(30) from dual;

行号       f1(30)     
---------- -----------
1          832040     

已用时间: 882.173(ms).Execute id is 522.

SQL>select f1(35) from dual;
select f1(35) from dual;

行号       f1(35)     
---------- -----------
1          9227465   

已用时间: 00:00:09.750. Execute id is 523.

SQL>

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
64#
发表于 2012-11-5 19:16 | 只看该作者
〇〇 发表于 2012-11-5 19:14
linux上的dm7
SQL>conn sysdba/sysdba
conn sysdba/sysdba

同样的linux上的oracle
SQL> create function f1(x integer) return integer as
  2  begin
  3    if x <= 2 then
  4      return 1;
  5    end if;
  6    return f1(x - 1) + f1(x - 2);
  7  end;
  8  /

函数已创建。

已用时间:  00: 00: 00.03
SQL> select f(30) from dual;
select f(30) from dual
       *
第 1 行出现错误:
ORA-00904: "F": 标识符无效


已用时间:  00: 00: 00.03
SQL> c/f/f1
  1* select f1(30) from dual
SQL> /

    F1(30)
----------
    832040

已用时间:  00: 00: 00.54
SQL> c/30/35
  1* select f1(35) from dual
SQL> /

    F1(35)
----------
   9227465

已用时间:  00: 00: 05.94

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
65#
发表于 2012-11-5 19:19 | 只看该作者
〇〇 发表于 2012-11-5 19:16
同样的linux上的oracle
SQL> create function f1(x integer) return integer as
  2  begin

oracle本地编译快了1半
SQL> alter session set plsql_code_type = native;

会话已更改。

已用时间:  00: 00: 00.01
SQL> alter function f1 compile;

函数已更改。

已用时间:  00: 00: 00.46
SQL> select f1(30) from dual;

    F1(30)
----------
    832040

已用时间:  00: 00: 00.34
SQL> select f1(35) from dual;

    F1(35)
----------
   9227465

已用时间:  00: 00: 03.66
SQL>

使用道具 举报

回复
论坛徽章:
43
现任管理团队成员
日期:2011-05-07 01:45:08ITPUB元老
日期:2012-09-12 14:50:28版主5段
日期:2014-06-11 02:21:31阿斯顿马丁
日期:2013-11-19 10:38:16祖母绿
日期:2012-11-06 12:43:12路虎
日期:2013-11-20 11:37:53雪佛兰
日期:2013-09-05 13:28:25ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:24秀才
日期:2015-05-26 13:32:07
66#
发表于 2012-11-6 17:16 | 只看该作者
〇〇 发表于 2012-11-5 19:19
oracle本地编译快了1半
SQL> alter session set plsql_code_type = native;

这个有点意思,学习了

使用道具 举报

回复
论坛徽章:
43
现任管理团队成员
日期:2011-05-07 01:45:08ITPUB元老
日期:2012-09-12 14:50:28版主5段
日期:2014-06-11 02:21:31阿斯顿马丁
日期:2013-11-19 10:38:16祖母绿
日期:2012-11-06 12:43:12路虎
日期:2013-11-20 11:37:53雪佛兰
日期:2013-09-05 13:28:25ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:24秀才
日期:2015-05-26 13:32:07
67#
发表于 2012-11-6 17:19 | 只看该作者
〇〇 发表于 2012-11-5 19:19
oracle本地编译快了1半
SQL> alter session set plsql_code_type = native;

这个我试了怎么没有效果?

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
68#
发表于 2012-11-6 18:42 | 只看该作者
myth8860 发表于 2012-11-6 17:19
这个我试了怎么没有效果?

是用同一个函数?

使用道具 举报

回复
论坛徽章:
0
69#
发表于 2013-4-2 19:38 | 只看该作者
DM是从MY SQL继承来的;

使用道具 举报

回复
论坛徽章:
43
现任管理团队成员
日期:2011-05-07 01:45:08ITPUB元老
日期:2012-09-12 14:50:28版主5段
日期:2014-06-11 02:21:31阿斯顿马丁
日期:2013-11-19 10:38:16祖母绿
日期:2012-11-06 12:43:12路虎
日期:2013-11-20 11:37:53雪佛兰
日期:2013-09-05 13:28:25ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:24秀才
日期:2015-05-26 13:32:07
70#
发表于 2013-4-3 09:27 | 只看该作者
本帖最后由 myth8860 于 2013-4-3 09:29 编辑
zzz288 发表于 2013-4-2 19:38
DM是从MY SQL继承来的;

是吗?从哪里看出来的?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表