* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
|
Window7 32bit, Linux 64bit 등 |
|
[cubrid_rel] 수행 결과 |
|
[도움말]-[버전정보] 확인 |
|
java, php, odbc 등 입력 |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
큐브리드 매니저에서 실행계획을 열어보면
첨부파일 이미지와 같이 index 1 ,sargs ,filter1 이부분에서
index1,2 해당 인덱스가 타는걸 말하는거같고
sargs는 인덱스가 안탔다는거같고
그런데 filter1 부분은 어떤 걸 의미하나요?
메뉴얼에 filter 부분은 안나와있어서 질문드립니다.
실행계획에서 filter 부분은 해당 컬럼이 현재 스캔하는 인덱스 구성에는 포함되지만, 조회하는 범위를 정하지는 못하는 필터 조건으로 수행될 때 나타납니다.

CREATE TABLE t1 (a int, b int, c int);
CREATE INDEX t1_abc on t1 (a, b, c);
예를 들어 위와 같은 스키마를 가진 테이블이 있을 때, 아래 쿼리를 수행하면 실행계획이 다음과 같이 나타납니다.
select * from t1 where a = 1 and b > 5 and c = 1;
위 테이블의 경우 a, b, c 순서를 가진 인덱스를 가지고 있습니다. 따라서 a = 1 and b > 5 조건은 인덱스를 성공적으로 타서(스캔하여) 조회하는 범위를 줄일 수 있습니다.
하지만, b의 조건이 범위 조건이기 때문에 컬럼 c는 인덱스에는 있지만, 조회 범위를 줄이지 못하고 필터 조건으로만 수행되게 됩니다.
만약, 여기서 c가 인덱스에 없는 경우 실행계획에서는 filter가 아닌 sargs 로 나타나게 됩니다.
즉, 실행계획에서 filter 조건은 where 절에서 해당하는 컬럼이 현재 스캔하고 있는 인덱스에는 존재하지만 필터 조건으로 수행될 때 나타나게 됩니다.