更新在Oracle上花费了太多时间

时间:2012-06-23 09:17:03

标签: sql oracle

我使用oracle 10。 我有这样的更新声明:

update table1 t1 
   set v_value=(select v_value 
                from table2 t2 
                where t2.user_id=t1.user_id  
                  and t2.item_id=t1.item_id  )

它有效但需要太多时间。我该如何优化它?

2 个答案:

答案 0 :(得分:3)

您可以尝试合并声明:

merge into table1 t1
using
(
   select user_id,
          item_id,
          v_value
   from table2
) t2 ON (t1.user_id = t1.user_id and t1.item_id = t1.item_id)
when matched then update
  set v_value = t2.v_value;

(您可能需要检查语法,MERGE中的哪些部分是强制性的,而且10到11之间没有相同的变化 - 长时间没有使用10g)

答案 1 :(得分:-3)

通过观察声明来调整声明几乎是不可能的。 获得解释计划,它将告诉您是否使用全表扫描(设置自动跟踪)。 我还建议使用免费工具,我刚发布 - odbtools.com。它允许您分析语句并生成解释计划,它将显示您是否进行了全表扫描,而您的选择部分不使用索引。