728x90
반응형
오늘은 Postgresql의 EXISTS에 대해서 알아보자.
( 오라클이나 MySQL에도 있으니 알아만 놓으면 어디서나 사용가능! )
기본문법
SELECT * from [테이블명] where EXISTS (서브쿼리);
SELECT * from [테이블명] where NOT EXISTS (서브쿼리);
EXISTS는 해당 값이 있는 지 없는 지 체크하는 연산자이다. 그럼 왜 EXISTS를 쓰는걸까?
EXISTS를 사용하는 가장 큰 이유는 성능면에서 유리하기 때문이다. 보통 우리가 존재여부를 체크할 때는
count(*)를 많이 쓰기 마련인데.. count(*)와 EXISTS를 비교해보자.
-- count(*) 사용 : 안좋은 예
SELECT * from PUBLIC.COMTNWEBLOG C where 1 >= (select count(*) from COMTNWEBLOG C2 where C.RQESTER_ID = 'USER0.7');
-- EXISTS 사용 : 좋은 예
SELECT * from PUBLIC.COMTNWEBLOG C where EXISTS (select 1 from COMTNWEBLOG C2 where C.RQESTER_ID = 'USER0.7');
count(*)를 이용한 쿼리
쿼리를 실행하는 시간이 6.43s 만큼이나 걸렸다..
EXISTS를 사용한 쿼리
쿼리를 실행하는 시간이 1ms 밖에 걸리지 않았다..
6.43s는 1ms의 6430배이다.. 즉 성능차이가 6430배나 났다는 말이다..
데이터가 적으면 상관 없지만, 데이터가 많아지면 이렇게 성능에서 차이가 난다..
쿼리를 작성할 때 성능을 고려하여 작성하도록 하자
728x90
반응형