【发布时间】:2017-12-31 00:39:25
【问题描述】:
我有一个数据清理程序,它从两个表的卡片行中删除相同的数据。 这两个更新语句都使用相同的子查询来检测应该更新哪些行。
UPDATE table_1 SET card = NULL WHERE id in
(select id from sub_table WHERE /* complex clause here */);
UPDATE table_2 SET card = NULL WHERE id in
(select id from sub_table WHERE /* complex clause here */);
使用 Oracle 临时表是优化我的代码的好方法吗?
CREATE TEMPORARY TABLE tmp_sub_table AS
select id from sub_table WHERE /* complex clause here */;
UPDATE table_1 SET card = NULL WHERE id in (select * from tmp_sub_table);
UPDATE table_2 SET card = NULL WHERE id in (select * from tmp_sub_table);
我应该使用本地临时表还是全局临时表?
【问题讨论】:
-
如果
sub_table中的数据很大,我建议使用全局临时表。 -
根据您的第二个示例,我第二次选择全局临时表 (GTT)(尽管我会将
select * from tmp_sub_table更改为select id from tmp_sub_table以避免出现问题,如果有人在未来)。 GTT 的好处是您只需创建一次,因此您无需在代码中创建和删除它。
标签: oracle performance optimization temp-tables