【问题标题】:How to find out the temp space that will be required by a sql query on a database?如何找出数据库上的 sql 查询所需的临时空间?
【发布时间】:2012-02-03 09:25:02
【问题描述】:

我们的客户遇到了一些数据不一致的问题,我们向他们提出了修复问题的查询。

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

这是我发送给他们以解决他们的问题的查询:

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;

感谢您的帮助!

【问题讨论】:

  • 为什么这个问题用java标记?
  • sry 我通常在java上工作并默认添加它
  • 即使是像SELECT LEAD_ID FROM D_LEAD这样的简单查询,我也希望得到答复

标签: sql database oracle sql-execution-plan


【解决方案1】:

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

【讨论】:

  • 我可以理解,但我特别需要临时空间
  • 知道如何获得近似或精确的临时空间吗?
  • 解释计划包括对所需临时空间量的估计。也许您用来查看解释计划的工具默认不显示该列?但你绝对可以这样看:explain plan for [your query];,然后是select * from table(dbms_xplan.display);。查找 TempSpc 列。注意临时空间并不一定意味着临时表空间;如果所有排序或散列都可以在内存中完成,则不需要临时表空间。不幸的是,预测内存使用非常复杂。
  • 好的!我没有看到那个专栏,但会试试你刚才说的!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多