안녕하세요.


쿼리 튜닝하다가 이해 못할 현상을 발견하여 전문가님들의 의견을 구합니다.


50초가 걸리는 쿼리의 서브쿼리 SELECT 절에 top 1000000 넣었더니,

결과 데이터는 동일하였고 소요시간이 50초에서 2초로 줄었습니다.


대략 쿼리는 이렇게 생겼습니다. (빨간색추가한 부분입니다.)


SELECT *

FROM

(

  SELECT top 1000000 * FROM A WHERE A.x = 'XXX'

  UNION ALL

  SELECT  top 1000000 * FROM B WHERE B.y = 'YYY'

) p1

LEFT OUTER JOIN

(

  SELECT id,SUM(amount) amount

  FROM

  (

    SELECT top 1000000 * FROM A WHERE A.x = 'XXX'

    UNION ALL

    SELECT  top 1000000 * FROM B WHERE B.y = 'YYY'

  )

  GROUP BY id

) p2

ON p1.id = p2.id

, C

WHERE p1.id = C.ref_id

AND NOT EXISTS (

  SELECT 1 FROM E WHERE p1.id = E.ref_id AND p2.amount = E.amount

)



제가 이상하게 생각하는 점은,


top 1000000 없이 아래 처럼 실행한 경우.


1)    SELECT * FROM A WHERE A.x = 'XXX';

2)    SELECT * FROM B WHERE B.y = 'YYY';


결과 데이터가 1) 은 대략 1000개, 2)는 대략 100 개 밖에 안되었고,

결국 top 1000000 은 결과 데이터에는 아무런 영향도 미치지 않았다는 것입니다.

(사실 A, B 테이블 모두 레코드가 1000000 개가 되지 않습니다.)


혹시 캐시가 남았나 싶어서 조건도 약간씩 바꿔보고 top 1000000 구문도 넣었다 뺐다 해봤는데 결과는 마찬가지였습니다.

어떻게 이럴 수 있죠?


예상실행계획을 봐도 top 절이 추가된 것을 제외하고는 동일한 구조를 하고 있었습니다.


저는 ms sql 2008 을 사용하고 있습니다.


의견 부탁드려요 ㅠ

No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 1245
8102 트랜젝션 백업에 문제가 생겼습니다ㅠㅠ [1] 사이드사이드 2014.08.07 2140
8101 MS-SQL 버전별 서비스팩 업데이트 아직모자란사람 2014.08.07 3814
8100 (이전 질문 번호 8114) 각 Depth 별 하위를 포함하는 SUM 구하는 쿼리 [2] 오늘밤은안돼요 2014.08.07 2677
8099 MSsql에서 Oracle DB에 연결된 서버로 붙으려는데 에러가 [1] izuminoa 2014.08.07 7373
8098 인덱스 사이즈 관련 문의드립니다. [3] JKMoon 2014.08.06 2541
8097 아 조인 업데이트 될듯 말듯 절 괴롭히네여 ㅋ [4] 무념 2014.08.06 2864
8096 조회관련 쿼리 질문을 드립니다. 후니아기 2014.08.06 1821
8095 루트를 기준으로 모든 자식을 포함한 SUM 을 구하는 쿼리 질문드립니다. [1] 오늘밤은안돼요 2014.08.06 2186
8094 case문.. [1] 마힐링 2014.08.06 2254
8093 인덱스 관련 질문 드립니다. [3] JKMoon 2014.08.06 2341
8092 case 문 질문드립니다.. [3] 아수라발발타 2014.08.06 2424
8091 카탈로그 온라인상태로 변경 문의 김정권 2014.08.06 2640
8090 쿼리 질문 드립니다. [3] 전념 2014.08.05 2164
8089 사용중인 테이블 공간 확인 중.... SQL어렵.. 2014.08.05 2058
8088 DB접근제어 관련하여 문의드립니다. [1] 김삐씨 2014.08.05 2314
8087 쿼리 질문 드립니다 [2] 아수라발발타 2014.08.04 2074
8086 SQL Page관련 문의 드립니다. [2] SQL어렵.. 2014.08.04 2204
8085 Bulk insert , Union all , Order by 도와주세요. [2] Runningman、 2014.08.04 2943
» TOP 구문에 의한 말도 안되는(?) 성능개선 현상 문의 [7] ㅎㅌㅎㅌ 2014.08.01 3357
8083 테이블의 최종 변경 날짜 확인에 대해 문의 드립니다! [3] 가지마세요 2014.08.01 5659





XE Login