--문제의 쿼리
select *
from A inner join B
on A.id = B.id
where A.dt between @begin and @end
go

-- 800건
select count(*) from A where A.dt between @begin and @end

--20000000건
select count(*) from B

A.id에 인덱스 있음
B.id 에 인덱스 있음.
선택도 조낸 좋음..중복되는 id가 2개 있을까 말까..

근데..10초가 지나도..1분이 지나도 5분이 지나도 끝나지 않음..
씨밸..먼가가 잘못되었다..
각 데이터형을 살펴보니..

A.id varchar(12)
B.id nvarchar(12)였다..
오호라~

select *
from A inner join B
on convert(nvarchar(12), A.id) = B.id
where A.dt between @begin and @end
go

ㅡㅡ;;;
그래도 결과가 안나온다..
힌트며 온갖 지랄을 해도 결과는 똑같다..
예상 실행계획은 잘 타는데 말이다...
그렇게 2시간 30분이 흘렀다..

cross apply를 적용해본다..

select *
from A cross apply (select * from B where A.id = B.id) b
where A.dt between @begin and @end
go

ㅜㅜ
안나온다...아무래도 index seek는 글렀나부다.. top 1을 줘보자..


select *
from A cross apply (select top 1 * from B where A.id = B.id) b
where A.dt between @begin and @end
go

결국 원하는 시간에 나오게는 해결을 하였으나.. i/o가 좀 많다..
졸라 찜찜허다..

처음으로 시작하는 마음으로 다시 시작..
헉스!!!! 븅신..븅신..븅신..븅신..븅신..

A.id nvarchar(12)
B.id varchar(12)였다..

A테이블의 정보와 B테이블의 정보를 헤깔렸다!!!

select *
from A inner join B
on convert(varchar(12), A.id) = B.id
where A.dt between @begin and @endgo

닝기리..조또.. 주말에 퇴근도 못하고 이게 뭐여..