if exists (select * from table where a = 1)
요런 문에서 where 절의 컬럼에 인덱스 유무가 중요한가요?
Comment 3
-
이재학_302349
2013.06.11 09:34
-
치맥
2013.06.11 11:57
답변 감사합니다.
일단 쿼리문인 경우에 만족하는 값을 찾더라도 테이블 스캔시 끝까지 찾는걸로 알고있는데요
exists 문 같은경우에는 만족하는 값을 찾으면 바로 빠져나오는 거죠?
현재 이 조건에 해당하는 컬럼에 인덱스가 없던데
인덱스를 걸면 좀 더 빨라질 수 있을까요?
-
맨즈밤
2013.06.11 13:03
exists 문에서 만족하면 바로 빠져나오는거 맞구요. 인덱스 있으면 빨라집니다. 인덱스 SEEK로 딱 한건만 찾고 끝내면 되기 때문이죠.
그외 설명은 이재학_302349 님께서 잘 해놓으셨습니다.
성능면에서 중요하냐고 물으시는거 같은데요.
그냥 질문의 t-sql 구문만을 보자면 제일 중요하진 않습니다.
인덱스가 없는 경우 물리적인 상황에 따라 최소i/o 만으로 끝날수도 있고, 전체 테이블을 다 읽고나서야 끝날수도 있습니다.
즉, page들이 아래와 같이 있다면..
page1
page2
...
...
...
...
...
...
...
page10000000
====================scan=======================>
page1에 a=1이 있으면 금방 끝나고, page10000000에 있으면..
뭐.. 오래 걸리는거죠..