我使用 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 )
它有效,但需要太多时间。我该如何优化它?
您可以尝试合并语句:
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)
仅通过查看语句来调整语句几乎是不可能的。获取解释计划,它会告诉您是否正在使用全表扫描(设置自动跟踪)。我还建议使用免费工具,我刚刚发布了 - odbtools.com。它允许您分析您的语句并生成解释计划,它将显示您是否进行了全表扫描并且您的选择部分不使用索引。