簡體   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