首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle SQL:通过dblink连接

Oracle SQL:通过dblink连接
EN

Stack Overflow用户
提问于 2015-04-27 23:04:06
回答 1查看 7.7K关注 0票数 0

我在Oracle DB中使用next SQL-query:

代码语言:javascript
复制
    SELECT T1.*,
           T3.*
    FROM MyTable1 T1
    INNER JOIN MyTable2 T2 ON T2.Id1 = T1.Id
    LEFT JOIN MyTable3@dblink1 T3 ON T3.Id2 = T2.Id

这个查询非常简单和快速(大约1分钟,T1包含大约100万行,T3包含超过1000万行)。现在,我想使用dblink1中的MyTable4来过滤选定的行数据。为此,我使用子查询:

代码语言:javascript
复制
        SELECT T1.*,
               T3.*
        FROM MyTable1 T1
        INNER JOIN MyTable2 T2 ON T2.Id1 = T1.Id
        LEFT JOIN (SELECT Sub_T1.*
                        FROM MyTable3@dblink1 Sub_T1
                        INNER JOIN MyTable4@dblink1 Sub_T2 ON Sub_T2.Id3 = Sub_T1.Id
                        WHERE
                                    Sub_T2.MyColumn1 = 'required value') T3 ON T3.Id2 = T2.Id

但是这个查询太慢了(超过20分钟)。如果我将此查询重写为:

代码语言:javascript
复制
SELECT T1.*,
       T3.*
FROM MyTable1 T1
INNER JOIN MyTable2 T2 ON T2.Id1 = T1.Id
LEFT JOIN  MyTable3@dblink1 T3 ON T3.Id2 = T2.Id
LEFT JOIN MyTable4@dblink1 T4 ON T4.Id3 = T3.Id
WHERE
        T4.MyColumn1 = 'required value'

然后我的查询再次快速工作,但是我不喜欢result (我希望看到T3的列为null,如果WHERE返回false)。如何改进我的第二个查询,以提高速度呢?

EN

回答 1

Stack Overflow用户

发布于 2015-04-27 23:07:59

用括号表示查询能解决这个问题吗?

代码语言:javascript
复制
SELECT T1.*,
       T3.*
FROM MyTable1 T1 INNER JOIN
     MyTable2 T2
     ON T2.Id1 = T1.Id LEFT JOIN 
     (MyTable3@dblink1 T3 JOIN
      MyTable4@dblink1 T4
      ON T4.Id3 = T3.Id AND
         T4.MyColumn1 = 'required value'
     )
     ON T3.Id2 = T2.Id;

或者,也可以:

代码语言:javascript
复制
SELECT T1.*,
       T3.*
FROM MyTable1 T1 INNER JOIN
     MyTable2 T2
     ON T2.Id1 = T1.Id LEFT JOIN 
     MyTable3@dblink1 T3
     ON T3.Id2 = T2.Id
        EXISTS (SELECT 1 FROM MyTable4@dblink1 T4 WHERE T4.Id3 = T3.Id AND T4.MyColumn1 = 'required value'
               )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29899316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档