[mysql] index / 인덱스

2017. 1. 3. 10:40DB



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MySQL인덱스 기초

● 특정 컬럼 값이 가지고 있는 열을 빠르게 검색하기 위하여 사용

● MySQL의 경우 B-TREE 가 사용됨

● 오라클이나 MSSQL의 경우 여러가지 타입이 존재함

● 종류에는 PRIMARY KEY, UNIQUE, INDEX, FULL TEXT가 있다.(FULL TEXT의 경우 MyISAM 에서만 사용가능)

■ 인덱스 사용 목적

  •  where 절에 매치하는 열을 빠르게 검색하기 위하여
  •  불 필요한 열을 고려 대상에서 빠르게 제거하기 위하여
  •  JOIN시 다른 테이블에서 빠르게 필요한 열을 추출하기 위하여
  •  특정 index의 컬럼의 MIN이나 MAX값을 찾기 위하여

■ 인덱스를 사용하는 경우

  •  데이터의 양이 많고 검색이 빈번히 이루어 지는 경우
  •  인덱스를 걸고자 하는 필드의 값의 종류가 다양한 경우

■ 생성

  •  인덱스를 만들게 되면 MySQL에서  TABLE을 생성할시 만들어지는 3개의 파일 (MYD, MYI, FRM)중 MYI파일에 해당 컬럼을 색인화 하여 새롭게 저장(물론 인덱스를 사용하지 않을 경우 이 파일은 비어 있다.)
  •  사용자가 SELECT를 할 경우 인덱싱이 되어 있는 컬럼 정보를 이용할 경우 TABLE로 보내는 것이 아니라 MYI파일에 바로 검색하여 빠르게 검색

■ 단점 

  •  MYI파일에 새롭게 작성하기 떄문에 그만큼 디스크의 용량이 증가한다
  •  UPDATE, INSERT의 속도가 떨어진다 ( 매번  table과 table index를 모두 체크해야 하므로 속도가 느려진다 )

■ 주의사항

  •  index필드에 null이 존재할 수 없다
  •  한 테이블에 5개 이상의 인덱스는 권장하지 않는다
  •  인덱스가 된 컬럼을 가지고 조건에서 연산을 하면 무의미한 짓이다

■ 인덱스를 걸었지만 무의미 한 경우

  •  not <> 는 인덱스가 무의미하다
  •  like도 무의함
  •  where에서 연산하는 경우
  •  문자열의 경우 150 바이트 초과시

http://rrhh234cm.tistory.com/302 - 펌




index 추가

alter table 테이블명 add index 인덱스명(`컬럼명`);


index 확인

 show index from 테이블명; 


index 제거

alter table 테이블명 drop index 해당인덱스명(해당컬럼명) 




'DB' 카테고리의 다른 글

[MYSQL] timeout 설정  (0) 2021.02.01
[MYSQL] order by 조건  (0) 2018.07.19
[mongoDB] 외부 접속 설정 for centos  (0) 2015.08.27
[mongoDB] centos에서 php 드라이버 설치하기  (0) 2015.08.27
[MongoDB] centos에 mongodb 3.0 설치  (0) 2015.08.25