我使用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 )
它有效但需要太多时间。我该如何优化它?
答案 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。它允许您分析语句并生成解释计划,它将显示您是否进行了全表扫描,而您的选择部分不使用索引。