[Database] MySQL 인덱스 (Index)


인덱스 (Index)

  • 테이블에서 자주 사용하는 속성을 별도로 생성
  • 테이블의 검색 동작 속도를 향상시키기 위하여 사용
  • 테이블에 대한 킷값을 가지고 있는 사본 테이블
  • 사용자들은 인텍스를 볼 수 없다.
  • MySQL에서는 기본키에 대하여 인덱스가 자동 생성된다.
  • 대부분의 MySQL 인덱스 (기본키, UNIQUE, INDEX와 FULLTEXT)는 B-tree에 저장된다.
    • B-tree는 Binary Tree와 다르다.
    • B-tree : 여러 개의 자식 노드를 가질 수 있다.
    • Binary Tree : 2개의 자식 노드를 가진다.
  • 장점
    • WHERE 절이나 ORDER BY 처리에서 빠른 처리 속도
  • 단점
    • 인덱스가 설정된 테이블을 수정할 때 처리 속도가 떨어짐
  • 인덱스 생성시 고려 사항
    • WHERE절에서 자주 사용되는 속성을 선택한다.
    • 조인에 자주 사용되는 속성을 선택한다.
    • 인덱스가 많으면 속도가 느려진다.


인덱스 생성

  • 기본 형식
CREATE INDEX 인덱스명
ON 테이블명( 속성명, ... );
ALTER TABLE 테이블명 ADD INDEX 인덱스명 [ 인덱스타입 ]( 인덱스속성명, ... );
  • 테이블 생성 코드 ( 인덱스 생성 전 )

  • CREATE INDEX를 사용하여 Customer 테이블의 name 속성에 대하여 인덱스(nameidx)를 생성하시오.
CREATE INDEX nameidx ON customer( name );

  • 테이블 생성 코드 ( 인덱스 생성 후 )


인덱스 조회

  • 기본 형식
SHOW INDEX FROM 테이블명;

인덱스 삭제

  • 기본 형식
DROP INDEX 인덱스명 ON 테이블명 ;
ALTER TABLE 테이블명 DROP INDEX 인덱스명 ;