gpt4 book ai didi

oracle - 更新语句优化(where 子句中的函数)

转载 作者:行者123 更新时间:2023-12-01 07:12:05 25 4
gpt4 key购买 nike

我现在觉得很傻。

我必须在我无法直接访问的数据库上更新 100.000 行。该表的总行数大约为 500.000 行。
更新只是向字段添加一个字符,以防其长度 < 3。所以基本上:

UPDATE X SET VALUE = '0'||VALUE WHERE LENGTH(VALUE) < 3

所以我将此更新发送给 DBA,他们将其返回给我,说该语句的性能成本太高(因为完整的访问表和 100k 提交)
我应该写一个过程。然后他们为我提供了一个代码示例,以防我不知道如何制作。

我说 WTF,一个进程怎么会比单个更新语句运行得更快?做一些测试后,我的更新需要 30 秒才能运行,
按照他们的代码示例,这个过程需要 10 分钟。

因此,在经历了这么多挫折之后,真正的问题是:在 where 子句中使用这样的函数时,有没有办法避免完整的访问表? (该列已编入索引)

最佳答案

您的语句已经优化。它是基于集合的,并以最有效的方式查询表(全表扫描)。你将无法用更少的资源/时间编写一个完成同样工作的程序。您 CAN 编写一个性能不佳的程序,在出现错误时不可重启(即:每 100 行提交一次)并且会独占更多资源。

关注 Tom Kyte's mantra :

  • You should do it in a single SQL statement if at all possible.
  • If you cannot do it in a single SQL Statement, then do it in PL/SQL.
  • If you cannot do it in PL/SQL, try a Java Stored Procedure.
  • If you cannot do it in Java, do it in a C external procedure.
  • If you cannot do it in a C external routine, you might want to seriously think about why it is you need to do it

关于oracle - 更新语句优化(where 子句中的函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1808622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com