Exists 키워드를 이용한 효율적인 데이터 존재여부 확인법 데이타베이스
2010.09.04 09:29 Edit
일반적으로 개발시 테이블에 특정 데이터의 존재여부를 확인하기 위해
집계함수인 count()를 많이 이용한다. 적어도 여기 남쪽섬에서는 많이들 그런다.
단지 존재여부만을 확인하면 되니까 count() 결과는 0 이상이면 1 이던 1,000 이던 상관없을 것이다.
따라서, 조건을 만족하는 첫번째 놈을 만나면 테이블을 조회하는 작업을 집어치우고 1만 반환하면 된다.
그러나, 아래와 같이 count()를 사용하면 집계함수이므로
조건을 만족하는 전체범위를 다 조회하게 되는 비효율이 발생할 수 밖에 없다.
use AdventureWorks;
go
select count(*) from Production.Product
where StandardCost between 100 and 200;
이 쿼리를 아래처럼 Exists 키워드를 이용한 방식으로 변경해보자.
select count(1)
where exists( select * from Production.Product where StandardCost between 100 and 200 );
이놈은 결과가 있으면 1을 없으면 0을 반환할 것 이다.
중요한건, 하나라도 조건을 만족하는 결과가 나타나면 즉시 수행을 멈추고 결과를 반환하는 부분범위처리가 가능하다는 것이다.
참고로 실행계획도 한번 살펴보자.
79% vs 21% 이지만... 이 수치는 조건을 만족하는 데이터가 많을 수록 더 큰 차이를 보일 것이다.

이 글과 관련된 글
- [2010/02/02] 행번호 반환 (1)
- [2009/12/30] SQL서버 성능카운터 활용을 위한 팁 (1394)
- [2009/12/04] nProtect 웹사이트도 SQL Injection 해킹…대표 사과 (1804)
- [2007/09/29] 자주사용되는 SQL 삽입공격용 스트링 (671)
- [2007/09/17] SQL injection 방어대책. (1493)








