[mysql] index / 인덱스
2017. 1. 3. 10:40ㆍDB
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 |