-3

我已经编写了存储过程,调用它需要很长时间。我在“SP”中使用临时表。这可能是原因??

CREATE OR REPLACE PROCEDURE TEST_SP
IS
BEGIN
INSERT INTO MYTEMP_table (A, B )
      (  SELECT  id AS CUSTOMER_NO,
              ACC_NO AS ACCOUNT_NO
           FROM  myTable );
UPDATE MYTEMP_table
      SET MYTEMP_table.A =
             (  SELECT MIN (BRH_DATE)
                  FROM CUSTOMER,)



   UPDATE MYTEMP_table
      SET MYTEMP_table.B =
             (  SELECT MIN (SUBSTR (ENTRY_DATE, 0, 8))
                  FROM INFO)
                .......

MYTEMP_table 是临时表。

4

1 回答 1

2

这个代码片段看起来非常不完整。您正在用一个查询填充临时表,这似乎很奇怪:

select id, acc_no from myTable

然后用一个值清除所有列:

UPDATE MYTEMP_table
SET MYTEMP_table.A =
       (  SELECT MIN (BRH_DATE)
            FROM CUSTOMER,)

您的帖子不清楚,但希望您使用的是全局临时表(基于内存)而不是用于临时存储的物理表。

多次写入同一行是减慢工作速度的可靠方法(在物理表中更是如此,但无论哪种方式仍然很慢)。如果可能,请考虑以下事项:

  1. 使用分析函数或更复杂的初始查询来预先完成所有写作......
  2. 如果您不习惯/不熟悉运行/阅读说明计划,请尝试在 SQL 编辑器中手动运行每个 SQL 语句以评估其各自的性能......
于 2013-09-30T18:57:18.537 回答