색인 이 Oracle 에서 의 응용 깊이 분석

6522 단어 Oacle인덱스
색인 은 데이터 조 회 를 향상 시 키 는 가장 효과 적 인 방법 이자 전면적으로 파악 하기 어 려 운 기술 이다.정확 한 색인 은 효율 을 10000 배 높 일 수 있 고 잘못된 색인 은 데이터 베이스 공간 을 낭비 하고 조회 성능 을 크게 떨 어 뜨 릴 수 있 기 때문이다.
1.색인 관리 비용 1.색인 을 저장 하 는 디스크 공간 2.데이터 수정 작업(INSERT,UPDATE,DELETE)을 수행 하 는 색인 유지보수 3.데이터 처리 에 필요 한 추가 반환 공간.
2.실제 데이터 수정 테스트:한 표 에 필드 A,B,C 가 있 고 10000 줄 의 기록 을 삽입 하 는 테스트 를 실시 합 니 다.색인 을 만 들 지 않 았 을 때 평균 완성 시간 은 2.9 초 입 니 다.A 필드 에 색인 을 만 든 후 평균 완성 시간 은 6.7 초 입 니 다.A 필드 와 B 필드 에 색인 을 만 든 후 평균 완성 시간 은 10.3 초 입 니 다.A 필드 에서B 필드 와 C 필드 모두 색인 을 만 든 후 평균 완성 시간 은 11.7 초 입 니 다.상기 테스트 결 과 를 통 해 색인 이 데이터 수정 에 미 치 는 영향 을 뚜렷하게 알 수 있 습 니 다.
3.색인 은 저장 방법 에 따라 1.B*트 리 색인 B*트 리 색인 을 분류 하 는 것 이 가장 자주 사용 하 는 색인 입 니 다.그 저장 구 조 는 책의 색인 구조 와 유사 하고 분기 와 잎 두 가지 유형의 저장 데이터 블록 이 있 으 며 분기 블록 은 책의 큰 디 렉 터 리 에 해당 하 며 잎 블록 은 색인 된 구체 적 인 페이지 에 해당 합 니 다.일반 색인 및 유일한 구속 색인 은 B*트 리 색인 을 사용 합 니 다.
2.비트 맵 인덱스 비트 맵 인덱스 저장 은 주로 공간 을 절약 하고 ORACLE 가 데이터 블록 에 대한 접근 을 줄 이 는 데 사 용 됩 니 다.비트 맵 오프셋 방식 으로 표 의 줄 ID 번호 와 대응 하고 비트 맵 인덱스 를 사용 하면 중복 값 이 너무 많은 표 필드 입 니 다.비트 맵 인덱스 는 실제 밀집 형 OLTP(데이터 트 랜 잭 션 처리)에서 비교적 적 게 사 용 됩 니 다.OLTP 는 시 계 를 대량으로 삭제,수정,새로 만 들 기 때문에 ORACLE 는 조작 할 때마다 조작 할 데이터 블록 에 자 물 쇠 를 추가 하기 때문에 여러 사람 이 조작 하면 데이터 블록 잠 금 대기 또는 잠 금 현상 이 발생 하기 쉽 습 니 다.OLAP(데이터 분석 처리)에서 비트 맵 을 응용 하 는 것 이 유리 하 다.OLAP 에서 대부분 데이터 베 이 스 를 조회 하 는 작업 이 고 보통 데이터 창고 기술 을 사용 하기 때문에 대량의 데 이 터 는 비트 맵 색인 을 사용 하여 공간 을 절약 하 는 것 이 비교적 뚜렷 하 다.
4.색인 은 기능 별 분류 1.유일한 색인 은 두 가지 역할 을 합 니 다.하 나 는 데이터 제약 이 고 하 나 는 데이터 색인 입 니 다.그 중에서 데이터 제약 은 주로 데이터 의 완전 성 을 확보 하 는 데 사 용 됩 니 다.유일한 색인 이 발생 하 는 색인 기록 에서 모든 기록 은 하나의 유일한 ROWID 에 대응 합 니 다.
2.주 키워드 색인 주 키워드 색인 에서 발생 하 는 색인 은 유일한 색인 과 같 습 니 다.데이터베이스 에서 주 키 워드 를 만 들 때 시스템 이 자동 으로 만들어 집 니 다.
3.일반 색인 일반 색인 은 데이터 제약 작용 을 하지 않 고 그 기능 은 주로 필드 에 색인 표를 만들어 데이터 조회 속 도 를 향상 시 키 는 것 이다.
5.색인 은 색인 대상 에 따라 분류 1.단일 색인(폼 필드 의 색인)2.다 중 색인(표 여러 필드 의 색인)3.함수 색인(필드 에 함수 연산 을 하 는 색인)
함수 인덱스 만 드 는 방법:create index 유 료 날짜 인덱스 on GCDFSS(trunc(sk_rq))create index 완전 클 라 이언 트 번호 인덱스 on yhzl(qcbh||kh_bh)함 수 를 색인 한 후 현재 세 션 이 현재 세 션 을 설정 해 야 할 query 를 참조 하려 면rewrite_enabled 는 TRUE 입 니 다.alter session set query_rewrite_enabled=true
주:사용자 함수 에 색인 을 한다 면 사용자 함 수 는 deterministic 인 자 를 추가 해 야 합 니 다.함수 가 입력 값 이 고정 되 어 있 는 상황 에서 반환 값 도 고정 되 어 있다 는 뜻 입 니 다.예:create or replace function truncadd(input_date date)return date deterministicasbeginreturn trunc(input_date+1);end trunc_add;
6.색인 스 캔 분류 1.INDEX UNIQUE SCAN(색인 유일한 값 으로 스 캔)select*from zlyhjbqk where hbs_bh='5420016000'
2.INDEX RANGE SCAN(색인 값 범위 로 스 캔)select*from zlyhjbqk where hbs_bh>'5420016000'select * from zl_yhjbqk where qc_bh>'7001'
3.INDEX FAST FULL SCAN(색인 값 으로 빠르게 모두 스 캔)select hbsbh from zl_yhjbqk order by hbs_bhselect count(*) from zl_yhjbqkselect qc_bh from zl_yhjbqk group by qc_bh
7.어떤 상황 에서 색인 1.표 의 주 키 워드 를 만들어 야 합 니까?yhjbqk(사용자 기본 상황)중의 hbsbh(가구 표지 번호)
2.표 의 필드 는 유일 하 게 ORACLE 가 색인 을 이용 하여 데이터 의 완전 성 을 확보한다.예 를 들 어 lchj(프로 세 스 부분)의 lcbh+hj_sx(절차 번호+절차 순서)
3.직접 조건 조회 필드 는 SQL 에서 조건 제약 에 사용 되 는 필드 입 니 다.예 를 들 어 zlyhjbqk(사용자 기본 상황)의 qcbh(구역 번호)select*from zlyhjbqk where qc_bh='7001'
4.조회 중 다른 표 와 연 결 된 필드 는 zl 와 같은 외부 키 관 계 를 자주 구축 합 니 다.ydcf(전기 성분)중의 jldbbh(계량 점 표 번호)select*from zlydcf a,zl_yhdb b where a.jldb_bh=b.jldb_bh and b.jldb_bh='540100214511'
5.검색 에서 정렬 된 필드 정렬 필드 가 색인 을 통 해 접근 하면 정렬 속도 select*from zlyhjbqk order by qc_bh(qc 구축bh 인덱스)select*from zlyhjbqk where qc_bh='7001' order by cb_sx(qc 구축bh+cb_sx 색인,주:qc 를 포함 한 색인 일 뿐 입 니 다.bh 와 cbsx 필드)
6.조회 중 통계 또는 그룹 통계 필드 select max(hbsbh) from zl_yhjbqkselect qc_bh,count(*) from zl_yhjbqk group by qc_bh
8.색인 을 만 들 지 않 거나 적 게 만들어 야 하 는 경우 1.표 기록 이 너무 적 습 니 다.한 표 에 5 개의 기록 만 있 으 면 색인 으로 기록 에 접근 하려 면 먼저 색인 표를 방문 한 다음 에 색인 표를 통 해 데이터 표를 방문 해 야 합 니 다.일반 색인 표 와 데이터 표 는 같은 데이터 블록 에 있 지 않 습 니 다.이런 상황 에서 ORACLE 는 데이터 블록 을 왕복 으로 두 번 읽 어야 합 니 다.색인 을 사용 하지 않 은 상태 에서 ORACLE 는 모든 데 이 터 를 한 번 에 읽 고 처리 속도 가 색인 을 사용 하 는 것 보다 빠 를 것 입 니 다.표 와 같이 zlsybm(사용 부서)는 보통 몇 개의 기록 만 있 습 니 다.메 인 키 워드 를 제외 하고 모든 필드 에 색인 을 만 드 는 것 은 성능 최적화 가 되 지 않 습 니 다.실제로 이 표 에 대해 통계 분석 을 한 후에 ORACLE 도 당신 이 만 든 색인 을 사용 하지 않 고 전체 표 로 자동 으로 접근 합 니 다.예:select*from zlsybm where sydw_bh='5401'(sydwbh 색인 만 들 기 성능 최적화 없 음)
2.자주 삽입,삭제,수정 하 는 표 는 자주 처리 하 는 업무 표 에 대해 조회 가 허용 되 는 상황 에서 색인 을 최대한 줄 여야 한다.예 를 들 어 zlyhbm,gc_dfss,gc_dfys,gc_fpdy 등 업무 표.
3.데이터 가 중복 되 고 분포 가 평균 적 인 표 필드 에 한 표 에 10 만 줄 의 기록 이 있 고 한 필드 A 는 T 와 F 두 가지 값 만 있 으 며 각 값 의 분포 확률 은 약 50%이다.그러면 이런 표 A 필드 에 색인 을 만 들 면 데이터 베 이 스 를 조회 하 는 속 도 를 높이 지 못 한다.
4.메 인 필드 와 자주 조회 하지만 메 인 필드 의 색인 값 이 많은 표 필드,예 를 들 어 gcdfss(전기 요금 실제 수령)표 는 항상 유 료 번호,가구 표지 번호,참조 날짜,전기 요금 발생 연월,조작 표지 에 따라 특정한 수금 상황 을 구체 적 으로 조회 합 니 다.만약 에 모든 필드 를 하나의 색인 에 만 들 면 데이터 의 수정,삽입,삭제 시간 을 증가 할 것 입 니 다.실제 적 으로 수금 을 분석 하면 유 료 번호 색인 에 따라 기록 을 몇 개 로 줄 이 고 뒤의 몇 개의 필드 색인 에 따라 조회 하면 성능 에 큰 영향 을 미 치지 않 을 것 이다.
9.어떻게 색인 을 통 해 결 과 를 되 돌려 줍 니까?하나의 색인 은 보통 하나 이상 의 필드 를 포함 합 니 다.표 에 접근 하지 않 고 색인 을 직접 적용 하지 않 으 면 결 과 를 되 돌려 줍 니 다.그러면 데이터 베이스 조회 의 성능 을 크게 향상 시 킬 것 입 니 다.다음 세 개의 SQL 을 비교 하면 표 zlyhjbqk 의 hbsbh 와 qcbh 필드 에 색인 만 들 기:
1 select hbs_bh,qc_bh,xh_bz from zl_yhjbqk where qc_bh='7001'실행 경로:SELECT STATEMENT,GOAL=CHOOSE 11 265 5565 TABLE ACCESS BY INDEX ROWID DLYX ZLYHJBQK 11 265 5565 INDEX RANGE SCAN DLYX 카탈로그 색인 1 265 평균 실행 시간(0.078 초)
2 select hbs_bh,qc_bh from zl_yhjbqk where qc_bh='7001'실행 경로:SELECT STATEMENT,GOAL=CHOOSE 11 265 3710 TABLE ACCESS BY INDEX ROWID DLYX ZLYHJBQK 11 265 3710 INDEX RANGE SCAN DLYX 카탈로그 색인 1 265 평균 실행 시간(0.078 초)
3 select qc_bh from zl_yhjbqk where qc_bh='7001'실행 경로:SELECT STATEMENT,GOAL=CHOOSE 1 265 1060 INDEX RANGE SCAN DLYX 구역 책 색인 1 265 1060 평균 실행 시간(0.062 초)은 실행 결과 세 번 째 SQL 의 효율 이 가장 높다 는 것 을 알 수 있다.실행 경 로 를 보면 첫 번 째,두 번 째 SQL 은 TABLE ACCESS BY INDEX ROWID(ROWID 접근 표를 통 해)라 는 절 차 를 많이 실 행 했 음 을 알 수 있 습 니 다.되 돌아 오 는 결과 열 에는 현재 사용 중인 색인(qc)이 포함 되 어 있 기 때 문 입 니 다.bh)에서 색인 되 지 않 은 열(hbsbh,xh_bz),제3 조 SQL 은 직접 QCBH 가 결 과 를 되 돌려 주 는 것 이 색인 을 통 해 결 과 를 바로 되 돌려 주 는 방법 이다.
10.빅 데이터 계량 표 의 색인 을 어떻게 신속하게 새로 만 드 는 지 한 표 의 기록 이 100 만 이상 이면 그 중의 한 필드 에 색인 을 만 드 는 데 시간 이 오래 걸 리 고 서버 데이터 베 이 스 를 다운 시 킬 수 있 습 니 다.색인 을 만 들 때 ORACLE 은 색인 필드 에 있 는 내용 을 추출 하고 전면적으로 정렬 해 야 하기 때 문 입 니 다.데이터 양 이 많 으 면 서버 정렬 메모리 가 부족 하여 디스크 교환 공간 을 참조 하여 진행 할 수 있 으 며,이것 은 서버 데이터베이스 작업 에 심각 한 영향 을 줄 수 있 습 니 다.해결 방법 은 데이터베이스 시작 초기 화 에 있 는 정렬 메모리 파 라미 터 를 확대 하 는 것 입 니 다.만약 에 대량의 색인 수정 을 하려 면 10M 이상 의 정렬 메모리(ORACLE 부족 크기 는 64K)를 설정 할 수 있 습 니 다.색인 작성 이 끝 난 후에 파 라미 터 를 수정 해 야 합 니 다.실제 OLTP 데이터 라 이브 러 리 응용 프로그램 에 서 는 이렇게 큰 정렬 메모리 가 사용 되 지 않 기 때 문 입 니 다.

좋은 웹페이지 즐겨찾기