Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

ksw_devlog

index(인덱스) 본문

기술면접/데이터베이스

index(인덱스)

kimcoach 2023. 4. 20. 00:39

index : 정렬해놓은 컬럼사본

 

Binary search tree => B-tree => B+tree

 

인덱스

 

  • 어떤 데이터가 디스크의 어느 위치에 있는지에 대한 정보를 가진 주소록과 같음
  • 데이터 - ROWID(주소) 쌍으로 저장됨
  • 일반적인 select 쿼리 실행 시 먼저 메모리의 database buffer cache를 체크
  • buffer cache에는 자주 사용되는 테이블들이 캐싱되어 있어 여기에 데이터가 있을 경우 바로 찾아 출력하고 없을 경우 하드디스크에 있는 데이터 파일에서 데이터를 찾음
  • 인덱스를 사용하면 이런 과정을 거치지 않고 바로 주소를 통해 찾아감

 

인덱스 생성 원리?

  • 해당 테이블을 모두 읽고 인덱스를 만드는 동안 데이터가 변경되면 문제가 되므로 해당 데이터들이 변경되지 못하도록 조치한 후 메모리(PGA의 Sort Area)에서 정렬
  • 전체 테이블 스캔 → 정력 → Block 기록  (PGA내의 Sort Area 공간 부족시 Temporary Tablespace이용해 정렬)

 

동작원리

 

  • 데이터 파일의 블록이 10만개가 있다고 가정할때 select문 실행시
  • 1) server process가 구문분석과정을 마친후 database buffer cache에 조건에 부합하는 데이터가 있는지 확인
  • 2) 해당 정보가 buffer cache에 없다면 디스크 파일에서 조건에 부합하는 블럭을 찾아 database buffer cache에 가져온 뒤 사용자에게 보여줌
  • 이 경우 index가 없으면 10만개 전부 database buffer cache로 복사한뒤 풀스캔으로 찾게됨
  • index가 있으면 where절의 조건의 컬럼이 index의 키로 생성되어있는지 확인한 뒤, 인덱스에 먼저 가서 조건에 부합하는 정보가 어떤 ROWID를 가지고 있는지 확인 후 ROWID에 있는 블럭을 찾아가 해당 블럭만 buffer cache에 복사

 

인덱스 사용이 불가능한 경우?

  • 인덱스 컬럼을 조건절에서 가공하면 인덱스 사용이 불가능
  • 부정형 비교는 인덱스 사용 불가능
  • is null 조건만으로는 인덱스 사용 불가

 

 

 

https://ssunws.tistory.com/45

 

인덱스의 원리 및 종류

인덱스란? 어떤 데이터가 디스크의 어느 위치에 있는지에 대한 정보를 가진 주소록과 같음 데이터 - ROWID(주소) 쌍으로 저장됨 일반적인 select 쿼리 실행 시 먼저 메모리의 database buffer cache를 체크

ssunws.tistory.com