Oracle 복합 색인 과 빈 값 의 색인 사용 문제 소결

1903 단어 Oacle인덱스빈 값
어제 QQ 그룹 에서 SQL 최적화 문 제 를 논 의 했 는데 문 구 는 대체적으로 다음 과 같다.

select A,min(B) from table group by A;--A,B   not null  ,A    ,B    。--      IX_TEST(A,B)
따라서 수 동 테스트,환경 은 Oracle 자체 가 가지 고 있 는 scott 사용자 의 emp 표를 사용 합 니 다.
1.먼저 다음 문장의 실행 계획 을 봅 니 다(이 때 표 는 메 인 키 색인 만 있 습 니 다).

2.IX 추가TEST(deptno,comm)후 실행 계획 보기:


발견 은 여전히 전체 시계 스 캔 이다.
3.deptno 열 에 비 어 있 는 제약 조건 을 추가 한 후 실행 계획 을 다시 봅 니 다.


4.정리:
Btree 인덱스 는 빈 값 을 저장 하지 않 습 니 다.이것 은 모든 Btree 인덱스 를 사용 하 는 데이터베이스 의 공통점 입 니 다.
이 예 에서 우 리 는 deptno,comm 의 일치 색인 을 만 들 었 습 니 다.deptno 에 빈 제약 이 없 으 면 어떤 record 가 색인 에 나타 나 지 않 는 다 는 것 을 설명 합 니 다.이 때 min(comm)을 찾 으 려 면 표 로 돌아 가 야 deptno 가 null 인 줄 에 comm 값 이 있 는 지 확인 할 수 있 습 니 다.이 때 유 틸 리 티 는 전체 표 스 캔 이 색인 재 회 표 보다 더 합 리 적 이 라 고 생각 하기 때문에 전체 표 스 캔 을 선택 하 십시오.
비어 있 지 않 은 제약 을 추가 하면 deptno 가 비어 있 을 수 없 기 때문에 색인 의 key 값 은 표 총 줄 수 와 같 습 니 다.다른 열 comm 는 비어 있어 도 min()의 값 에 영향 을 주지 않 습 니 다.색인 을 스 캔 하면 필요 한 결 과 를 얻 을 수 있 습 니 다.이때 최적화 기 는 색인 스 캔 을 선택 하 십시오.
한편,Mysql 에 서 는 복합 색인 첫 번 째 열 에 비 어 있 는 제약 이 있 든 없 든 색인 을 사용 합 니 다.deptno 가 null 인 경우 전체 부분 이 한 그룹 에서 min(comm)을 가 져 옵 니 다.Mysql 의 BTREE 색인 은 Oracle 과 다 르 기 때문에 첫 번 째 열 이 비어 있 으 면 되 돌아 오지 않 아 도 됩 니 다.
마지막:Oracle 의 열 은 비 공 제약 을 추가 할 수 있 습 니 다.반드시 추가 해 야 합 니 다.
총결산
위 에서 말 한 것 은 소 편 이 소개 한 Oracle 복합 색인 과 빈 값 의 색인 사용 문제 소결 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기