데이터베이스/Postgresql

[Postgresql] EXISTS 연산자를 이용하여 존재여부를 확인하자.

모찌바라기 2022. 4. 9. 00:43
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
반응형