查看: 3821|回复: 9

[性能调整] 【讨论】自定义函数性能问题

[复制链接]
论坛徽章:
1
优秀写手
日期:2014-11-08 06:00:13
发表于 2014-11-3 11:58 | 显示全部楼层 |阅读模式
各位大牛帮忙看下,怎么优化  ,FUNC_PRODUCT_MATCH_2
FUNC_PRODUCT_MATCH_3
FUNC_PRODUCT_MATCH_4
FUNC_PRODUCT_MATCH_5 是自定义的函数,两个查询表都是全表扫描 ,

INSERT /* +APPEND*/ INTO  DM_PRODUCT_MATCH_RECO NOLOGGING
SELECT
ACCT_MONTH,
AREA_NO,
CITY_NO,
USER_NO,
DEVICE_NUMBER,
USER_DINNER,
USER_TYPE,
USER_DINNER_RECO,
USER_DINNER_DESC,
RENT,
TOTAL_FEE,
MATCH_VALUE_BEFORE,
MATCH_VALUE_CALL,
MATCH_VALUE_FLUX,
MATCH_VALUE_CALLED,
FUNC_PRODUCT_MATCH_5(MATCH_VALUE_CALL,MATCH_VALUE_FLUX,MATCH_VALUE_CALLED) MATCH_VALUE,
CALL_SPILL,
FLUX_SPILL,
CALLED_SPILL
FROM(
SELECT
A.ACCT_MONTH,
A.AREA_NO,
A.CITY_NO,
A.USER_NO,
A.DEVICE_NUMBER,
A.USER_DINNER,
A.USER_TYPE,
B.USER_DINNER USER_DINNER_RECO,
B.USER_DINNER_DESC,
B.RENT,
A.MATCH_VALUE_BEFORE,
A.TOTAL_FEE,
FUNC_PRODUCT_MATCH_2(A.CALL_LOC,A.CALL_LOC_LONG,A.CALL_PRO,A.CALL_COU,
                     B.CALL_LOC,B.CALL_LOC_LONG,B.CALL_PRO,B.CALL_COU) MATCH_VALUE_CALL,  
FUNC_PRODUCT_MATCH_2(0,A.FLUX_LOC,A.FLUX_PRO,A.FLUX_COU,
                     0,B.FLUX_LOC,B.FLUX_PRO,B.FLUX_COU) MATCH_VALUE_FLUX,              
FUNC_PRODUCT_MATCH_3(A.CALLED_LOC,A.CALLED_PRO,A.CALLED_COU,
                     B.CALLED_LOC,B.CALLED_PRO,B.CALLED_COU,
                     B.CALLED_LOC_PRI,B.CALLED_PRO_PRI,B.CALLED_COU_PRI) MATCH_VALUE_CALLED,
FUNC_PRODUCT_MATCH_4(A.CALL_LOC,A.CALL_LOC_LONG,A.CALL_PRO,A.CALL_COU,
                     B.CALL_LOC,B.CALL_LOC_LONG,B.CALL_PRO,B.CALL_COU) CALL_SPILL,  
FUNC_PRODUCT_MATCH_4(0,A.FLUX_LOC,A.FLUX_PRO,A.FLUX_COU,
                     0,B.FLUX_LOC,B.FLUX_PRO,B.FLUX_COU) FLUX_SPILL,  
FUNC_PRODUCT_MATCH_4(0,A.CALLED_LOC,A.CALLED_PRO,A.CALLED_COU,
                     0,B.CALLED_LOC,B.CALLED_PRO,B.CALLED_COU) CALLED_SPILL  
FROM  MID_PRODUCT_MATCH_USER_RECO  A,     
MID_PRODUCT_DINNER_RECO_1 B
WHERE A.USER_TYPE=B.USER_TYPE
) T;


认证徽章
论坛徽章:
40
2014年新春福章
日期:2014-02-18 16:43:09喜羊羊
日期:2015-05-18 16:24:25慢羊羊
日期:2015-06-12 13:08:22暖羊羊
日期:2015-07-02 16:06:20暖羊羊
日期:2015-07-06 16:28:55狮子座
日期:2015-07-29 17:14:43摩羯座
日期:2015-09-02 13:58:47白羊座
日期:2015-09-08 10:39:06天枰座
日期:2015-09-17 21:41:53摩羯座
日期:2015-10-29 21:07:02
发表于 2014-11-3 13:38 | 显示全部楼层
1、两表联接,除了联接条件没有其它条件,走全表扫描是正常的。
2、要优化语句,需要提供执行计划,统计信息等信息才好分析和入手。

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-11-08 06:00:13
 楼主| 发表于 2014-11-3 14:33 | 显示全部楼层
bfc99 发表于 2014-11-3 13:38
1、两表联接,除了联接条件没有其它条件,走全表扫描是正常的。
2、要优化语句,需要提供执行计划,统计信 ...

F:\1.jpg

使用道具 举报

回复
认证徽章
论坛徽章:
40
2014年新春福章
日期:2014-02-18 16:43:09喜羊羊
日期:2015-05-18 16:24:25慢羊羊
日期:2015-06-12 13:08:22暖羊羊
日期:2015-07-02 16:06:20暖羊羊
日期:2015-07-06 16:28:55狮子座
日期:2015-07-29 17:14:43摩羯座
日期:2015-09-02 13:58:47白羊座
日期:2015-09-08 10:39:06天枰座
日期:2015-09-17 21:41:53摩羯座
日期:2015-10-29 21:07:02
发表于 2014-11-3 15:02 | 显示全部楼层
斗气一段 发表于 2014-11-3 14:33

看不到图片。

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-11-08 06:00:13
 楼主| 发表于 2014-11-4 10:33 | 显示全部楼层
bfc99 发表于 2014-11-3 15:02
看不到图片。

自定义的函数是不是 会根据每一条结果去扫描一遍表,扫描次数是结果集的条数?,还是 只扫描一次表,得到结果集之后,在内存中运算?

使用道具 举报

回复
认证徽章
论坛徽章:
40
2014年新春福章
日期:2014-02-18 16:43:09喜羊羊
日期:2015-05-18 16:24:25慢羊羊
日期:2015-06-12 13:08:22暖羊羊
日期:2015-07-02 16:06:20暖羊羊
日期:2015-07-06 16:28:55狮子座
日期:2015-07-29 17:14:43摩羯座
日期:2015-09-02 13:58:47白羊座
日期:2015-09-08 10:39:06天枰座
日期:2015-09-17 21:41:53摩羯座
日期:2015-10-29 21:07:02
发表于 2014-11-4 10:56 | 显示全部楼层
本帖最后由 bfc99 于 2014-11-4 11:15 编辑
斗气一段 发表于 2014-11-4 10:33
自定义的函数是不是 会根据每一条结果去扫描一遍表,扫描次数是结果集的条数?,还是 只扫描一次表,得到 ...

从你的SQL语句上看,这几个函数应该是有多少条返回记录,就要执行多少次。如果你的函数中还涉及访问其它表,则可能意味着这些表也要被访问相应的次数。

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-11-08 06:00:13
 楼主| 发表于 2014-11-4 11:02 | 显示全部楼层
bfc99 发表于 2014-11-4 10:56
从你的SQL语句上看,这几个函数应该是有多少条返果记录,就要执行多少次。如果你的函数中还涉及访问其它表 ...

函数没有涉及到其他的表,只是里边涉及到一些复杂运算,不用函数写太复杂,但是写成自定义函数后,数据跑得异常慢,两个表关联 确实是需要全表扫描,这块感觉没法优化了,就是函数这块 能不能优化下。你说的执行多少次,指的是扫描表的次数,还是函数执行次数?

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-11-08 06:00:13
 楼主| 发表于 2014-11-4 11:06 | 显示全部楼层
斗气一段 发表于 2014-11-4 11:02
函数没有涉及到其他的表,只是里边涉及到一些复杂运算,不用函数写太复杂,但是写成自定义函数后,数据跑 ...

要是扫描次数过多的话,我只能把函数拆了,结果集大概是7000w条数据

使用道具 举报

回复
认证徽章
论坛徽章:
40
2014年新春福章
日期:2014-02-18 16:43:09喜羊羊
日期:2015-05-18 16:24:25慢羊羊
日期:2015-06-12 13:08:22暖羊羊
日期:2015-07-02 16:06:20暖羊羊
日期:2015-07-06 16:28:55狮子座
日期:2015-07-29 17:14:43摩羯座
日期:2015-09-02 13:58:47白羊座
日期:2015-09-08 10:39:06天枰座
日期:2015-09-17 21:41:53摩羯座
日期:2015-10-29 21:07:02
发表于 2014-11-4 11:13 | 显示全部楼层
斗气一段 发表于 2014-11-4 11:02
函数没有涉及到其他的表,只是里边涉及到一些复杂运算,不用函数写太复杂,但是写成自定义函数后,数据跑 ...

函数的执行次数

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-11-08 06:00:13
 楼主| 发表于 2014-11-4 11:53 | 显示全部楼层
bfc99 发表于 2014-11-4 11:13
函数的执行次数

恩,我理解错了,谢谢啊。

使用道具 举报

回复

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

本版积分规则 发表回复

PostgreSQL中国大会,参会票抢购!

由 PostgreSQL中文社区与ITPUB联合主办的第九届《PostgreSQL 中国技术大会》将在北京隆重召开。PostgreSQL 作为功能最强的的开源关系型数据库之一,得到了越来越多企业的推广和运用,也越来越受到广大技术爱好者的欢迎和重视。这将是 PostgreSQL 的又一次交流盛会。
----------------------------------------
时间:2019年11月29~11月30日

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