选择...进行更新,然后选择大量数据

时间:2016-10-07 19:54:00

标签: sql oracle

假设一个包含数亿条记录和列的巨大表格已被很好地编入索引。

之间是否有任何性能问题
SELECT * from HUGE_TABLE where ... AND ... FOR UPDATE

SELECT * from HUGE_TABLE where ... AND ... 

FOR UPDATE子句的主要原因是因为我们可能有多个应用程序实例同时运行相同的查询,但需要避免更新冲突。

此时我担心两个性能问题:1。如果没有其他查询在运行,select for update会慢吗? 2.如果巨大的表上有select / update的许多其他活动查询,那么这个表上的整个情况会有什么表现(也会在问题中更新)

1 个答案:

答案 0 :(得分:0)

与普通SELECT ... FOR UPDATE相比,

SELECT至少会产生两个性能问题:

  1. 阻止其他会话。这有点明显,您已经明白了这一点,但值得一提的是,创建更多锁定当然会导致性能问题。好消息是Oracle永远不会升级锁,所以它只能锁定你所要求的内容。
  2. 编写锁定数据。 FOR UPDATE通过对每个相关块进行小更新来工作。它在某些方面类似于常规更改,并且会通过运行select used_urec from gv$transaction;之类的查询来创建重做和撤消记录。根据锁定的行数,这可能比常规SELECT贵得多,即使不涉及其他会话。