2

我使用 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  )

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

4

2 回答 2

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)

于 2012-06-23T09:20:33.517 回答
-3

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

于 2012-06-24T00:48:23.073 回答