优化分布式查询需要从以上 3 个方面着手。
下面的 local_tab 7 万多条,remote_big_tab 百万条,remote_small_tab
7 万多条。
1.使用 Collocated 内联视图
也就是 SQL 要对引用不同远程库的表,要组织好,将相同库的表放一起组织
成内联视图,这样 ORACLE 就很容易知道这个内联视图里的表是在同一远
程库作完查询
后再返回给本地库,这样减少了本地库与远程库的交互次数和传输结果集的
数量和次数。比如上面的查询
SELECT * FROM local_tab a
WHERE EXISTS
(SELECT 1 FROM remote_big_tab@remote b,remote_small_tab@remote c
WHERE b.object_id=c.object_id AND a.object_type=b.object_type);
执行计划
----------------------------------------------------------
Plan hash value: 49311412
-----------------------------------------------------------------------------------
-------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Inst |IN-OUT|
-----------------------------------------------------------------------------------
-------------
| 0 | SELECT STATEMENT | | 42747 | 4508K| 2152 (4)| 00:00:26 | | |
|* 1 | HASH JOIN | | 42747 | 4508K| 2152 (4)| 00:00:26 | | |
| 2 | VIEW | VW_SQ_1 | 26 | 286 | 1855 (4)| 00:00:23 | | |
| 3 | REMOTE | | | | | | REMOTE | R->S |
| 4 | TABLE ACCESS FULL| LOCAL_TAB | 73985 | 7008K| 296 (1)| 00:00:04 | | |
-----------------------------------------------------------------------------------
-------------
Predicate Information (identified by operation id):
评论