Important Study - DB index to improve performance


DB Index

  • 검색 속도를 높이기 위한 색인 기술이다.

  • 보통 인덱스는 일반적으로 SELECT 쿼리의 WHERE에 사용할 컬럼에 대해 효율적인 검색을 위해 사용하거나, 다른 테이블과의 JOIN에 사용된다. (주로 효율적인 검색을 위해 사용된다.)

  • 일반적으로 SQL 서버에 데이터를 저장할 때는 내부적으로 아무런 순서없이 저장한다. 이때, 데이터 저장영역은 Heap 이라고 한다.

  • Heap에서는 인덱스가 없는 테이블의 데이터를 찾을 때

  • 전체 데이터 페이지의 처음 레코드부터 끝 페이지 마지막 레코드까지 모두 조회하게 된다.

  • 이러한 검색 방식을 풀 스캔(Full Scan) 또는 테이블 스캔(Table Scan)이라고 한다.

  • 이러한 검색의 속도 향상을 이유로 인덱스를 사용하게 된다.



DB Index 사용 시 고려해야 하는 부분

  • 인덱스는 한 테이블당 보통 3~5개가 적당하다. ( 물론 정규화 정도나 테이블 목적이 따라 다를 수 있다. )

  • 카디널리티가 높으면( 한 컬럼이 갖고 있는 값의 중복도가 낮음 ) 인덱스 설정에 좋다.

  • 선택도가 낮으면 ( 한 컬럼이 갖고 있는 값 하나로 적은 row가 찾아진다. ) 인덱스 설정에 좋다.

  • 컬럼의 특정값의 row 수 / 테이블의 총 row 수 x 100 ==> 이 5~10 일 경우 사용하는 것이 좋다.

  • 조회 활용도가 높으면 인덱스 설정에 좋다. (WHERE의 대상 컬럼으로 많이 활용되는지로 판단하면 된다.)

  • 수정 빈도가 낮으면 인덱스 설정에 좋다. ( 인덱스도 테이블이기 때문에, 컬럼의 값이 자주 바뀌면 인덱스 테이블도 새롭게 갱신되어야 함. )



DB Index 를 무조건 많이 하면 안되는 이유

  • 인덱스 설정 시, 데이터베이스에 할당된 메모리를 사용하여 테이블 형태로 저장되게 되므로 메모리 사이즈 문제가 발생 할 수 있음.

  • 인덱스로 지정된 컬럼의 값이 바뀌게 되면 인덱스 테이블이 갱신되어야 하므로 느려질 수 있음.



DB Index 에 관한 기타 내용

  • 인덱스는 주로 Select 쿼리에서는 성능이 잘 나온다.

  • Update, Delete 는 수정 삭제할 데이터를 찾는데에 빠를 뿐, 수정 삭제 처리 자체가 빨라지지는 않는다.

  • Insert 는 효율이 좋지 않다.



DB Index 사용 방법

  • MySQL 기준이다.

  • TB_USER 라는 테이블의 USER_NAME 을 기준으로 하는 IDX_USER 라는 index 를 만드는 예시이다.

 CREATE INDEX IDX_USER ON TB_USER(USER_NAME);






results matching ""

    No results matching ""