我在通过Database Link连接的不同数据库上有两个相同的模式。
Schema_1: Source Schema. **Rows being inserted at rapid rate.**
Schema_2: Target Schema.
以快速速率插入Schema_1(源架构)的行。
我在Source Schema中运行SQL,如下所示:
Insert into Table_1@DB_LINK select * from Table_1
此声明需要几分钟时间。
现在我按如下方式更改语句(使用闪回查询)
Insert into Table_1@DB_LINK select * Table_1 as of timestamp to_timestamp ( to_timestamp ( date ));
此查询在几秒钟内完成。
为何如此巨大的差异?
答案 0 :(得分:1)
在闪回查询中,您正在选择完全插入05/01/2017 10:00:00
的行。但是在非闪回查询中,您正在选择表中插入的所有行。
简单演示:
SQL> create table t1(id number, name varchar2(20));
Table created.
SQL> insert into t1 values(1, 'joe');
1 row created.
SQL> insert into t1 values(2, 'jay');
1 row created.
SQL> commit;
Commit complete.
SQL> insert into t1 values(3, 'john');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t1;
ID NAME
---------- --------------------
1 joe
2 jay
3 john
SQL> select * from t1 as of timestamp to_timestamp('02-MAY-17 11:00','DD-MON-RR HH24:MI');
ID NAME
---------- --------------------
1 joe
我的第一个查询select * from t1;
与非闪回查询相同,后者从表中选择所有行。
我的第二个查询select * from t1 as of timestamp to_timestamp('02-MAY-17 11:00','DD-MON-RR HH24:MI');
类似于您的闪回查询,它只选择一行。
当然,插入一行比插入三行要快。