최적화 CTE 쿼리

0

질문

내가 큰 가입하의 15 테이블이 있습니다. Simplified 그것은 다음과 같습니다

WITH CTE AS
(
  SELECT A.ID,
         B.K,
         X.Date,
         X.ID,
         ROW_NUMBER() OVER (PARTITION BY A.ID ORDER BY X.date ASC, x.id ASC) RN
         FROM A
         INNER JOIN B ON A.ID = B.ID        
         INNER JOIN C ON B.ID = C.ID    
         LEFT JOIN X ON (X.G = A.ID
                     OR X.H = B.ID
                     OR X.I = C.ID)
)
SELECT * 
FROM CTE
WHERE RN = 1

실행 시간은 1 초 주로하기 때문에 마지막에 가입하의 X. 중복을 피하기 위해 추가 ROW_NUMBER 부분으로 CTE.

수있는 방법을 최적화이 바람직하게 사용하는 ANSI SQL 기 때문에서 실행 되는 SQL Server Oracle?

1

최고의 응답

3

나는 그것을 얻었다. 그것은 빠른 슈퍼 다음과 같이(0.1 초 단위):

  SELECT A.ID,
         B.K,
         X.DATE,
         X.ID,
  FROM A
  INNER JOIN B ON A.ID = B.ID        
  INNER JOIN C ON B.ID = C.ID    
  LEFT JOIN 
  (
     SELECT G, H, I, ID, DATE,
     ROW_NUMBER() OVER (PARTITION BY G ORDER BY DATE ASC, ID ASC) RN
     FROM X
  ) X ON RN = 1 AND (X.G = A.ID
                     OR X.H = B.ID
                     OR X.I = C.ID)
2021-10-27 13:48:09

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................