--문제의 쿼리
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
닝기리..조또.. 주말에 퇴근도 못하고 이게 뭐여..