如何在尽可能短的时间内更新所有具有不同值的多行(数千)

时间:2014-09-22 07:09:39

标签: sql oracle

 UPDATE element e1 SET e1.line_number = 
    (
      SELECT t.r FROM 
        (
          select ele,rownum r from
            ( 
              select            nvl(par.SEQUENCE,ch.SEQUENCE),ch.SEQUENCE,nvl2(par.SEQUENCE,ch.SEQUENCE,0),ch.element_id ele 
              from element par right join element ch on par.element_id=ch.parent_element_id 
              where ch.document_id = 78384  order by 1,3,2
             )
         ) t ,element e1
         WHERE e1.element_id = t.ele 

     )  WHERE e1.document_id = 78384;

1 个答案:

答案 0 :(得分:0)

我无法直接提供您要求的答案,但提供一些可能对您有帮助的提示:

  • 首先,您应该给我们一些关于您的用例的提示。你可能会猜到你的陈述中发生了什么,但是如果你描述你拥有的和你需要的东西,那么帮助你会容易得多。
  • 你有3个级联select,这通常不是最好的主意。另外,内部选择中有一个order by,这不是必需的。
  • 基本上你想要过滤所有需要更新的行 - 尝试使用连接将其放入select中。并且始终首先使用最有可能过滤掉最多行的条件。
  • 总是在尝试优化语句时,请使用explain plan命令查看执行计划。通过它,您可以看到诸如全表扫描或索引的使用。如有必要,您可以提供optimizer hints来控制执行语句的最佳方式。