[英]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.