存储过程处理销量数据速度快,数据越大,速度越慢,这是为什么。

diablofriend 2008-09-18 03:30:00
各位朋友,我现在写了一个存储过程,以前是用java调SQL写得,在处理小量数据(几KB)的时候,速度会比用java写得程序快一倍
但是数据量稍微增大(几十KB)的时候,速度会比java写得程序慢很多,也是1-2倍的样子吧,请问这事为什么啊?
代码中很多用到了如下的代码格式
    INSERT INTO T030_SHIPMENT_REQ_IMP_ERR
(T030_CREATE_YMD,
T030_UPDATE_YMD,
T030_TRAN_KBN,
T030_TANTO_CD,
T030_TERM_CD,
T030_WAREH_CD,
T030_OWNER_CD,
T030_GET_ID,
T030_SEND_NO,
T030_ERR_LINE,
T030_ERR_COL,
T030_ERR_CD,
T030_ERR_TXT,
T030_ERR_VAL,
T030_MEMO)
SELECT TO_CHAR(SYSDATE, 'yyyyMMddhh24miss'),
TO_CHAR(SYSDATE, 'yyyyMMddhh24miss'),
'1',
'System',
null,
AR.T501_WAREH_CD,
AR.T501_OWNER_CD,
'99999999999',
T501_SLIP_NO,
AR.num,
'',
'1',
'行番号に値がありません',
AR.T501_LINE_NO,
''
from (SELECT rownum as num,
T501_WAREH_CD,
T501_OWNER_CD,
T501_LINE_NO,
T501_SLIP_NO
FROM T501_AEON_ORDER
LEFT JOIN M029_DESTINATION ON T501_AEON_ORDER.T501_WAREH_CD =
M029_DESTINATION.M029_WAREH_CD
AND T501_AEON_ORDER.T501_OWNER_CD =
M029_DESTINATION.M029_OWNER_CD
AND RTRIM(T501_AEON_ORDER.T501_CUSTOM_CD2) =
RTRIM(M029_DESTINATION.M029_CUSTOM_CD)
AND RTRIM(T501_AEON_ORDER.T501_SHOP_CD) =
RTRIM(M029_DESTINATION.M029_SHIP_TO_CD)
AND M029_DESTINATION.M029_TRAN_KBN < '3'
WHERE T501_WAREH_CD = p_Wareh_CD
AND T501_OWNER_CD = p_owner_CD
AND T501_CUSTOM_CD2 = p_custom_cd2
AND T501_SHOP_CD = p_shop_cd
AND T501_DELI_PLAN_YMD = p_deli_plan_YMD
AND T501_ORDER_KBN = p_order_kbn
AND T501_RESULT_FLG = '2'
AND T501_TRAN_KBN < '3'
ORDER BY T501_CUSTOM_CD2,
T501_SHOP_CD,
T501_DELI_PLAN_YMD,
T501_ORDER_KBN,
T501_SLIP_NO,
T501_LINE_NO) AR
WHERE AR.T501_LINE_NO IS NULL;


还有这种
   SELECT


'System'

FROM T501_AEON_ORDER
LEFT JOIN M029_DESTINATION ON T501_AEON_ORDER.T501_WAREH_CD =
M029_DESTINATION.M029_WAREH_CD
AND T501_AEON_ORDER.T501_OWNER_CD =
M029_DESTINATION.M029_OWNER_CD
AND RTRIM(T501_AEON_ORDER.T501_CUSTOM_CD2) =
RTRIM(M029_DESTINATION.M029_CUSTOM_CD)
AND RTRIM(T501_AEON_ORDER.T501_SHOP_CD) =
RTRIM(M029_DESTINATION.M029_SHIP_TO_CD)
AND M029_DESTINATION.M029_TRAN_KBN < '3'
LEFT JOIN M028_CUSTOM ON T501_AEON_ORDER.T501_WAREH_CD =
M028_WAREH_CD
AND T501_AEON_ORDER.T501_OWNER_CD =
M028_OWNER_CD
AND M028_CUSTOM_CD =
RPAD(T501_AEON_ORDER.T501_CUSTOM_CD2,
12,
' ')
WHERE ROWNUM = 1
AND T501_WAREH_CD = p_wareh_cd
AND T501_OWNER_CD = p_owner_cd
AND T501_CUSTOM_CD2 = p_custom_cd2
AND T501_SHOP_CD = p_shop_cd
AND T501_DELI_PLAN_YMD = p_deli_plan_ymd
AND T501_ORDER_KBN = p_order_kbn
AND T501_RESULT_FLG = '2'
AND T501_TRAN_KBN < '3'
---------------------------------------
AND T501_AEON_ORDER.T501_SLIP_NO NOT IN
(SELECT T030_SHIPMENT_REQ_IMP_ERR.T030_Send_No
FROM T030_SHIPMENT_REQ_IMP_ERR
WHERE T030_SHIPMENT_REQ_IMP_ERR.T030_GET_ID = p_get_id)
AND T501_AEON_ORDER.T501_SLIP_NO IN
(SELECT column_value FROM TABLE(CAST(p_slip_NO_array AS T_AEON_SLIP_NO)))
---------------------------------------
ORDER BY T501_CUSTOM_CD2,
T501_SHOP_CD,
T501_DELI_PLAN_YMD,
T501_ORDER_KBN,
T501_SLIP_NO,
T501_LINE_NO;


请大家予以指点啊!~!!
...全文
238 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉星9527ABC 2008-09-21
  • 打赏
  • 举报
回复
硬解析非常高的存储过程 是什么意思,麻烦楼上的解说一下
xiaoxiao1984 2008-09-21
  • 打赏
  • 举报
回复
一般来说,存储过程的效率要高于java程序,但是前提的存储过程和java代码都写的很好,没有太大改进余地。如果存储过程的代码不是很好,而java程序的代码非常好,就可能出现楼主说的情况。
例如:使用绑定变量和批量提交的java程序在效率上就很有可能高于一个不使用绑定变量或批量提交,又或者硬解析非常高的存储过程。

效率一般来说都是相对的,不是说存储过程的效率一定高于java程序
wffffc 2008-09-20
  • 打赏
  • 举报
回复
程序中是否有大量的计算?plsql的计算能力不如java,可能会有影响
kingofworl 2008-09-20
  • 打赏
  • 举报
回复
如果你java程序中的语句和过程中的语句是一样的话, 正常是没有道理减少了网络开销反而慢很多的,会不会是过程中语句中的变量没有使用绑定,造成执行计划重复解析 ,而java中使用了绑定,例如: insert into a(?,?)
吉星9527ABC 2008-09-20
  • 打赏
  • 举报
回复
我最近也遇到速度的问题,后台把存储过程里的SQL ,统统改成动态SQL,就是拼字符串,然后通过DBMS_SQL包来执行,速度大大提升了。建议楼主尝试一下。
我的程序开始也是存储过程比JAVA慢
diablofriend 2008-09-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 oracledbalgtu 的回复:]
不只是procedure,所有的东西在数据量增大的情况下,处理都会性能下降的。这个很容易理解啊。
难道能够在数据量增加的情况下,会越来越快!!!

引用 1 楼 diablofriend 的回复:
存储过程处理小量数据速度快,数据越大,速度越慢,这是为什么。
[/Quote]

我不至于笨到认为数据量大,认为速度越来越快吧。你这样的回答未免。。。。。。。
我要说的是为什么
本来是比java快的,可后来为什么会比java慢了,希望您能明白。
diablofriend 2008-09-18
  • 打赏
  • 举报
回复
我的意思可能没有表达清楚,我现在是将本来用java写得程序写到存储过程中,
目的是为了提高速度。
而且呢,使用小量数据的情况呢,存储过程的确比java程序要快。
可问题是使用大量的数据的情况下,存储过程反而比java程序慢了,
不清楚的地方在这,为什么反而慢了。谢谢各位朋友了
sleepzzzzz 2008-09-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 diablofriend 的回复:]
存储过程处理小量数据速度快,数据越大,速度越慢,这是为什么。

[/Quote]
难道数据量越大,速度越快吗?

优化一下吧,看看尽量索引之类的。。
oracledbalgtu 2008-09-18
  • 打赏
  • 举报
回复
不只是procedure,所有的东西在数据量增大的情况下,处理都会性能下降的。这个很容易理解啊。
难道能够在数据量增加的情况下,会越来越快!!!

[Quote=引用 1 楼 diablofriend 的回复:]
存储过程处理小量数据速度快,数据越大,速度越慢,这是为什么。
[/Quote]
diablofriend 2008-09-18
  • 打赏
  • 举报
回复
存储过程处理小量数据速度快,数据越大,速度越慢,这是为什么。

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧