Dev Hyeri

기술스택/SQL

MySQL INDEX 정리

_hyeri 2023. 10. 8. 00:22

 

INDEX

처리 속도를 향상시키기 위해서 컬럼에 대해 생성하는 객체

 

 

 

종류


 1. Clustered Index

  • 기본키primary key 컬럼은 기본적으로 클러스터형 인덱스가 생성됨
    • 테이블 데이터는 기본키 컬럼을 기준으로 정렬되고 트리 구조의 일련의 데이터 페이지에 물리적으로 저장
    • 데이터베이스 엔진이 해당 기본키의 행을 쉽게 찾을 수 있게 함

 

 

 

2. Non-Clustered Index

  • 특정 컬럼을 보조 인덱스로 생성
    • 데이터 페이지가 없고 키 값과 행 로케이터가 있다. 
    • 컬럼에 유니크 제약을 넣으면 보조 인덱스 생성됨
    • 먼저 보조 인덱스로 해당 컬럼의 값을 찾고 그 값이 가지고 있는 기본키primary key 값으로 클러스터 인덱스를 찾아 실제 데이터 행을 찾는다. 

 

 

 

 

인덱스 생성


인덱스 생성 경우 :

  • 데이터가 엄청 큼
  • 조인(성능을 많이 잡아먹는)이 사용됨

 

 

인덱스 생성 컬럼 :

  • 중복이 없거나 적은 컬럼
  • 자주 사용되는 컬럼에 인덱스 생성 

 

 

 

 

인덱스 장단점


장 : 검색 속도 빨라짐.  

단 : 인덱스를 위한 추가 공간이 필요. 검색 외 INSERT, UPDATE, DELETE가 빈번한 테이블에서는 오히려 성능 저하 발생

 

 

 

 

인덱스 쿼리


  인덱스 확인   : SHOW INDEX FROM 테이블명;

  인덱스 생성   :

  • 테이블 생성시 

CREATE TABLE 테이블명 (

    컬럼1 타입,

    컬럼2 타입,

    INDEX 인덱스명(컬럼1),

    UNIQUE INDEX 인덱스명(컬럼2) 

);

 

 

  • 테이블 생성 후

CREATE INDEX 인덱스명 ON 테이블명(컬럼);

ALTER TABLE 테이블명 ADD INDEX 인덱스명(컬럼);

 

  인덱스 삭제   :

ALTER TABLE 테이블명 DROP INDEX 인덱스명;

ALTER TABLE 테이블명 DROP INDEX 인덱스명, DROP INDEX 인덱스명,DROP INDEX 인덱스명;

 

 

 

'기술스택 > SQL' 카테고리의 다른 글

MySQL VIEW / CTE WITH / CASE WHEN THEN  (0) 2023.10.11
MySQL 연산자 우선순위, IN vs EXISTS  (0) 2023.10.11
MySQL 함수  (0) 2023.10.11
MySQL 기본 완전 정리  (0) 2023.10.05
SQL, JDBC, DBMS, DB란?  (0) 2023.09.04