[DB] Indexing

귀찮Lee·2023년 2월 20일
0

DataBase / MySQL

목록 보기
8/16
post-thumbnail
post-custom-banner

◎ Indexing

  • RDBMS에서 검색 속도를 높이기 위한 기술
  • 색인화 되어있는 INDEX 파일을 검색하여 검색속도를 빠르게 한다.
    • 보통 SELECT 쿼리의 WHERE절이나 JOIN 예약어를 사용했을때 인덱스가 사용되며 SELECT 쿼리의 검색 속도를 빠르게 하는데 목적
  • 조건에 따라 순서에 맞게 순서를 따로 저장하여 특정 조건에서 검색이 용이하도록 한다.

◎ Indexing 장단점

  • 장점

    • 특정 조건에서 정보를 찾을 때 빠르게 데이터를 가져올 수 있다.
  • 단점

    • 인덱스가 데이터베이스 공간을 차지해 추가적인 공간이 필요해진다.
    • 인덱스 된 필드에서 데이터를 업데이트하거나, 레코드를 추가 또는 삭제할 때 성능이 떨어진다.
    • 인덱스를 생성하는데 시간이 많이 소요될 수 있다.

◎ index 자료구조 : B+ tree

  • 삽입/삭제 시 항상 균형을 이룸
  • 하나의 노드가 여러 개의 자식 노드를 가질 수 있음
  • 리프 노드에만 데이터 존재 -> 연속적인 데이터 접근 시 유리
  • 시각화 자료

◎ index를 효율적으로 사용하는 방법

  • Cardinality : 중복되는 정도 (중복이 낮으면 Cardinality가 높음)

    • 유니크한 값들이 많을 경우, index에 효율적이다.
    • ex) 성별 Column에 Index를 한다고 하더라도 효율이 증가하지는 않을 것이다.
  • Update Frequency

    • 자주 수정되거나 추가되는 Table에서는 용이하지 못하다
    • 값이 추가될 때마다 값을 하나씩 밀어내면서 index를 수정해주어야 하기 때문
  • Size (인덱스 키 값의 크기)

    • 적당한 값을 설정할 필요가 있다.

◎ Index 사용 Query

  • LIKE

    -- namedp 대한 index가 있을 때, index는 순서대로 놓여 있으므로
    -- 아래 예시는 인덱스를 사용 (사전순 서치)
    SELECT * FROM Food WHERE name LIKE '왕%';
    -- 아래 예시는 인덱스를 미사용 (뒤로 끝나는 것은 사전순 배열이 안되어있음)
    SELECT * FROM Food WHERE name LIKE '%왕';
  • BETWEEN, IN

    -- 조건이 정렬과 관련 있으므로 인덱싱을 사용함
    SELECT * FROM Food
    WHERE name BETWEEN "가" AND "다";
    
    SELECT * FROM Food
    WHERE name IN("왕뚜껑", "왕짜장");
  • 추가 자료 : 인덱스가 안되는 명령어

◎ 관련 명령어

  • 현재 테이블에 있는 Index 조회

    SHOW INDEX FROM Track;
  • 인덱스 적용 확인 방법

    EXPLAIN SELECT * FROM Member
     WHERE NAME = '철수';
    -- Type가 ALL이고 possible keys가 NULL이면 Index 적용이 안됨
  • 인덱스 생성

    -- 둘중 하나 사용
    CREATE INDEX 인덱스명 ON 테이블명(컬럼명);
    ALTER TABLE 테이블명 ADD INDEX 인덱스명(컬럼명);
  • 인덱스 삭제

    -- 인덱스 삭제 (수정 시에는 DROP 후 재생성)
    ALTER TABLE 테이블명 DROP INDEX 인덱스명;

◎ 참고 자료

profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!
post-custom-banner

0개의 댓글