본문

DB 인덱싱과 최적화

도입

이번 포스팅에서는 index 부하 원리를 이해하고 적절하게 Index 디자인 방법을 정리할 예정이다. 


Index full scan VS Table full scan

Index full scan 개념

An index full scan reads the entire index in order. An index full scan can eliminate a separate sorting operation because the data in the index is ordered by index key.

(oracle 공식 - bit.ly/3fcqhWD)

Index full scan 원리

The database reads the root block, and then navigates down the left hand side of the index (or right if doing a descending full scan) until it reaches a leaf block.
Then the database reaches a leaf block, the scan proceeds across the bottom of the index, one block at a time, in sorted order. The database uses single-block I/O rather than multiblock I/O.

(oracle 공식 - bit.ly/2Eo4Sgb)

https://docs.oracle.com/en/database/oracle/oracle-database/20/tgsql/img/cncpt374.png

Table full scan 개념

A full table scan reads all rows from a table, and then filters out those rows that do not meet the selection criteria.

(oracle 공식 - bit.ly/2P9MmdL)

Table full scan 원리

the blocks are adjacent, the database can speed up the scan by making I/O calls larger than a single block, known as a multiblock read.

(oracle 공식 - bit.ly/2Xbs08a)

https://docs.oracle.com/en/database/oracle/oracle-database/20/tgsql/img/cncpt371.png

 

Index scan는 빠르지만 작동원리를 생각해보면 고비용 (CPU 많이 사용)
∴ 많은 데이터를 확인할 때는 table full scan이 효율적일 수 있다.


Index 비용의 원리

  1. 개념
    Table Random Access: Index 외의 조건들은 table를 직접 방문(Disk I/O)해야 조건에 맞는 데이터 인지 확인할 수 있다.

  2. Single Block I/O VS Multi Block I/O
    Single Block I/O: Index scan에서 사용하는 방법, 필요한 데이터(Single I/O로)만 가져와 메모리에 적재
    Multi Block I/O: Table full scan에서 사용하는 방법, 어짜피 모든 데이터를 가져오니 최대한(Async로) 빨리 메모리에 적재
    ∴ 많은 데이터를 확인할 때는 full scan이 빠를 수 있다. (Async로 동작하므로)

  3. Index를 무조건 빠르다?

    1. 대량의 데이터를 scan하면 성능이 느릴 수 있다.
    2. Table ramdom access 많이 발생하면 성능이 느릴 수 있다.

Index 주의 사항

  1. index column을 가공할 경우, index를 사용할 수 없다.
    ∴ column을 가공하지 않도록 튜닝 필요

  2. 묵시적 형변환이 발생하지 않도록 주의
    (묵시적 형변환으로 인해 index full scan이 발생할 수 있다.)


Index 엑세스 최적화

  1. Table Random Access 최소화 전략
    1. index 추가 고려
    2. scan 범위 줄이기: index 순서 변경 고려
    3. Coverage Index를 위해 attribute 변경(가능하면)
  2. Index가 많으면 데이터가 추가되면 index를 모두 동기화 해야하기 때문에 많이 걸린다.
    (select의 성능은 올라가지만, DML을 성능은 낮아진다.)

 

 

#db #인덱싱 #최적화

'컴퓨터 > 이론: 개발' 카테고리의 다른 글

DB 인덱싱과 최적화  (0) 2020.07.27
DB 인덱싱의 기본 원리와 이해  (0) 2020.07.26
DB 아키텍처와 성능 관리  (0) 2020.07.21
DB Modeling  (0) 2020.07.20
HashMap 동작원리 및 충돌해결  (0) 2020.07.15
프로세스 VS 쓰레드  (0) 2020.07.14

공유

댓글 0