본문 바로가기

데이터베이스/Oracle

[오라클] EXISTS 활용 예제

특정 조건을 만족하는 데이터가 있는지 존재유무만 확인하려고 할 때,
보통 COUNT(*)를 통해 건수가 0 초과 인지 확인하는 로직을 생각했다.

의미있는 성능의 차이를 확인하기위해 아래처럼 약 200만건정도의 더미데이터가 있는 테이블로 예제를 진행해보겠다.

1
2
3
/*데이터 확인*/
SELECT COUNT(*) CNT
FROM BOOK_EX.TBL_BOARD;
cs


먼저 count(*)를 이용한 쿼리를 확인해보자

1
2
3
4
/*데이터 확인*/
SELECT COUNT(*) CNT
FROM TBL_BOARD
WHERE BNO >= 5
cs

0.231초 소요됐다. BNO가 5이상인걸 모두 SCAN한다음에 카운트한 결과를 리턴하게된다. 따라서 TBL_BOARD의 건수가 많을수록 성능저하가 발생할 수 있다. 


EXISTS쿼리를 이용한다면 아래 쿼리처럼 구성할 수 있다.

1
2
3
4
5
6
7
SELECT 1 AS CNT /*EXISTS는 만족하는게 한 건이라도 있으면 스캔을 멈춘다.*/
FROM DUAL
WHERE EXISTS (SELECT 1
              FROM TBL_BOARD
              WHERE BNO >= 5)
;
cs

0.002초로 약 100배정도 성능향상이 있다. EXISTS는 서브쿼리내에서 WHERE조건절을 만족하는 행이 하나라도 발견되면 스캔을 멈추고 TRUE를 반환하게 된다. 따라서 TBL_BOARD의 건수가 아무리 많더라도 비교적 빠르게 존재유무를 판단할 수 있다.




'데이터베이스 > Oracle' 카테고리의 다른 글

[Oracle] 테이블명으로 Select쿼리문 자동생성  (0) 2019.06.04
오라클 계정생성  (0) 2019.05.08
Java 코드, Oracle stored procedure의 성능 비교  (1) 2016.05.24
Oracle cursor  (0) 2016.05.12
Oracle Stored Procedure  (0) 2016.05.12