2016-10-07 2 views
1

로컬 테이블과 연결된 서버 테이블을 조인하는 데 문제가 있습니다. 내부 조인을 사용하여이를 수행 할 수 있지만 쿼리를 실행하는 데 너무 오래 걸립니다. OPENQUERY로 할 수있는 방법이 있다는 것을 알고 있지만 얻을 수는 없습니다. 나는이 작업을 수행하기 위해 노력하고있어 이제연결된 서버 및 로컬 테이블이 연결됩니다.

SELECT DISTINCT 
       local.L_ID 
FROM dbo.local_table AS local 
INNER JOIN [server].[db].[dbo].[TB_TEST] as ts 
    on local.L_ID = ts.L_ID 
LEFT JOIN [server].[db].[dbo].[TB_EXE] as ex 
    on ts.A_ID = ex.T_ID 

가 :

SELECT DISTINCT 
       local.L_ID 
FROM dbo.local_table AS local 
INNER JOIN (
    SELECT * 
    FROM OPENQUERY(SERVER,'SELECT L_ID FROM TB_TEST' 
    ) ts 
    on local.L_ID = ts.L_ID 
left join OPENQUERY(SERVER,'SELECT T_ID FROM TB_EXE') ex 
    on ts.A_ID = ex.T_ID 

는 쿼리가 더 빨리 실행되도록 날이 올바른 방법으로 일을 도와 드릴까요 여기

내가 처음에 무엇을하고 있었는지의 ?

+0

절대 데이터 볼륨이 큰 경우 연결된 서버에서 조인을 향상시킬 수있는 방법이 없습니다. 한 쪽에서 데이터 양을 줄이는 것이 좋습니다. 이전 버전의 SQL Server는 연결된 서버 조인과 관련하여 좋지 않습니다. 어떤 버전의 SQL Server를 사용하고 있습니까? – qxg

답변

1

현재 인스턴스가 다른 인스턴스에 잘못 연결되었거나 서버 중 하나에서 이전 버전의 SQL Server가 사용 된 경우 이러한 종류의 쿼리 (연결 서버 포함)가 느려질 수 있습니다. 이 article에 대한 자세한 정보.

난 당신이 임시 테이블을 사용하는 것이 좋습니다 : 조회의 소개

SELECT * 
INTO #ts 
FROM OPENQUERY(SERVER,'SELECT L_ID FROM TB_TEST;') 

SELECT * 
INTO #ex 
FROM OPENQUERY(SERVER,'SELECT T_ID FROM TB_EXE;') 

SELECT DISTINCT 
       l.L_ID 
FROM dbo.local_table AS l 
INNER JOIN #ts 
    on l.L_ID = ts.L_ID 
LEFT JOIN #ex 
    on ts.A_ID = ex.T_ID 

DROP TABLE #ts 
DROP TABLE #ex 

.

거의 올바른 구문을 사용합니다. 이 같은 시도 :

SELECT DISTINCT 
       local.L_ID 
FROM dbo.local_table AS local 
INNER JOIN (
    SELECT * 
    FROM OPENQUERY(SERVER,'SELECT L_ID FROM TB_TEST;') 
    ) ts 
    on local.L_ID = ts.L_ID 
left join (
    SELECT * 
    FROM OPENQUERY(SERVER,'SELECT T_ID FROM TB_EXE;') 
    ) ex 
    on ts.A_ID = ex.T_ID 

또는를 :

SELECT DISTINCT 
       local.L_ID 
FROM dbo.local_table AS local 
INNER JOIN OPENQUERY(SERVER,'SELECT L_ID FROM TB_TEST;') ts 
    on local.L_ID = ts.L_ID 
left join OPENQUERY(SERVER,'SELECT T_ID FROM TB_EXE;') ex 
    on ts.A_ID = ex.T_ID 

은 또한 당신이 왼쪽이 세 번째 테이블과 조인을 사용하고 전혀 사용하지 않는 것이 있습니다.

+0

감사! 세 번째 표를 사용하여 그 안에 만 존재하는 열을 표시하고 있습니다. –