exists 문이 너무 느립니다

by Raven posted Mar 08, 2021


* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.

OS
Linux 64bit
CUBRID Ver.
10.1.3.7765-265e708
CUBRID TOOL Ver.
10.1.0.0006 (64bit)
응용 환경(API)
java


* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.

 

에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
데이터가 약 5천만건 존재하는 테이블에서 exists 로 조건에 부합하는 데이터가 있는지 찾는데 (조건에 부합하는 데이터는 약 3천3백만건 존재)

exists 내부 쿼리에 limit 1 을 넣으면 0.003 초만에 조회가 되지만 limit 를 빼고 조회할 경우 약 34초 가량 소요되고 있습니다.

조건문을 여러가지로 넣어서 테스트 해봤는데 결과는 두 쿼리가 항상 같았고

조건에 맞는 데이터가 현저히 적거나 아예 없을 때는 두 쿼리의 수행시간이 거의 같은 것으로 나타났습니다.

exists 문이 참일 때 참인 데이터가 여러개 있으면 다 찾느라 오래걸리는 듯한데

exists 는 원래 조건에 부합하는 데이터가 하나라도 있으면 질의 수행이 중단되어야 하지 않나요?

 

 

-- 조건에 맞는 데이터가 존재시 1, 미존재시 0

select count(1) from db_root

where exists (

         select 1

         from my_table

         where 조건

         limit 1 -- limit 가 없으면 수행시간이 현저히 느려짐

);

 


Articles

7 8 9 10 11 12 13 14 15 16