繁体   English   中英

两个链接服务器中连接两个数据库时的查询

[英]Query in Joining Two Databases in Two Linked Server

我有一个加入 Microsoft 和 Oracle 的查询(作为链接),但这个查询需要很长时间(超过 1 小时)。 但我单独运行每个连接,不需要很长时间(每个不到 10 秒)。 有什么办法可以重新查询。 例如,运行查询的不同部分,然后得到一个组合结果。

SELECT A.NAME, A.NMR, B.ADDRESS, C.TEL
FROM ALPHA A

LEFT JOIN (SELECT ADDRESS, NMR FROM OPENQUERY(ORCA, 'SELECT ADDRESS, NMR FROM tblADDRESS') B ON B.NMR = A.NMR

LEFT JOIN (SELECT TEL, NMR FROM OPENQUERY(ORCT, 'SELECT TEL, NMR FROM tblTEL') C ON C.NMR = A.NMR

我想单独跑

SELECT A.NAME, A.NMR FROM ALPHA A

然后

SELECT TEL, NMR FROM OPENQUERY(ORCT, 'SELECT TEL, NMR FROM tblTEL')

然后

SELECT TEL, NMR FROM OPENQUERY(ORCT, 'SELECT TEL, NMR FROM tblTEL')

然后

得到结果

我会尝试将 OPENQUERY 中的每个结果加载到他们自己的临时表中,然后将临时表加入到“本地”表中。

SELECT 
    ADDRESS
    ,NMR 
INTO #ORCA 
FROM 
    OPENQUERY(ORCA, 'SELECT ADDRESS, NMR FROM tblADDRESS')

SELECT 
    TEL
    ,NMR
INTO #ORCT
FROM 
    OPENQUERY(ORCT, 'SELECT TEL, NMR FROM tblTEL')

SELECT 
    A.NAME
    ,A.NMR
    ,ORCA.ADDRESS
    ,ORCT.TEL
FROM
    ALPHA A

        LEFT JOIN #ORCA ORCA
        ON A.NMR = ORCA.NMR

        LEFT JOIN #ORCT ORCT
        ON A.NMR = ORCT.NMR

我不确定性能会提高多少,但可以尝试使用 CTE。 我的一部分认为这会做完全相同的事情,但如果你说它们都单独运行得更快,也许它会有所帮助。

with data1 as (SELECT A.NAME, A.NMR FROM ALPHA A),
data2 as(SELECT ADDRESS, NMR FROM OPENQUERY(ORCA, 'SELECT ADDRESS, NMR FROM tblADDRESS'),
data3 as(SELECT TEL, NMR FROM OPENQUERY(ORCT, 'SELECT TEL, NMR FROM tblTEL')

SELECT A.NAME, A.NMR, B.ADDRESS, C.TEL
FROM data1 A
left join data2 B ON B.NMR = A.NMR
left join data3 C ON C.NMR = A.NMR

我不确定我是否完全遵循这个问题,但确实跨服务器连接往往效率很低。 可能您最好的方法是将SELECT您需要的数据子集从远程服务器放入本地临时表,然后JOIN临时表。

select * into #remoteAddress from openquery (orca, 'select id, address, nmr from tblAddress');
select * into #remoteTelephone from openquery (orcb, 'select tel, nmr from tblTel');
select a.name, a.nmr, b.address, c.tel
 from alpha a
 left join #remoteAddress b
  on a.nmr = b.nmr
 left join #remoteTelephone c
  on a.nmr = c.nmr

要点是避免跨服务器运行JOIN 将您需要的数据放入临时表中,然后加入它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM