如何找出数据库上的SQL查询所需的临时空间?

Moz*_*ath 5 sql database oracle sql-execution-plan

我们的客户遇到了一些不一致数据的问题,我们给了他们一个查询来修复它.

现在,在运行查询之前,客户要求我提供一个查询,该查询将提供运行该查询所需的临时空间.这实际上很重要,因为此查询可能会影响表中的许多条目.

以下是我发送给他们修复问题的查询:

declare
  cursor cur is select distinct SEQID from D_LEAD where SEQID IN( SELECT SEQID FROM D_LEAD WHERE CURR_FLAG = 1 GROUP BY
  SEQID HAVING COUNT(SEQID) >1);

  seq NUMBER; 

begin

  open cur;
  loop
    fetch cur into seq;
    update D_LEAD set CURR_FLAG = 0 where LEAD_ID IN (SELECT LEAD_ID FROM D_LEAD WHERE ((LEAD_ID != (SELECT MAX(LEAD_ID) FROM D_LEAD WHERE SEQID=seq)) AND SEQID=seq));
    exit when cur%NOTFOUND;
  end loop;
  close cur;
commit;
end;
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

dav*_* a. 3

Oracle 的EXPLAIN PLAN可能会让您了解查询成本。

  • 解释计划包括对所需临时空间量的估计。也许您用来查看解释计划的工具默认情况下不显示该列?但你肯定可以这样看到它:`explain plan for [your query];`,然后`select * from table(dbms_xplan.display);`。查找 TempSpc 列。注意,临时空间并不一定意味着临时表空间;如果所有排序或散列都可以在内存中完成,则不需要临时表空间。不幸的是,预测内存使用情况极其复杂。 (2认同)