Exists 키워드를 이용한 효율적인 데이터 존재여부 확인법 데이타베이스

일반적으로
일반적으로 개발시 테이블에 특정 데이터의 존재여부를 확인하기 위해

집계함수인 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%  이지만... 이 수치는 조건을 만족하는 데이터가  많을 수록 더 큰 차이를 보일 것이다.

 

 query_devmini_devmini.png


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

Leave Comments

2012.02
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29
RSS FEEDATOM FEED
thothPowered by TextyleSponsored by ETNEWS
T-NAVI