-
MySQL Index 기초지식Technique/RDBMS 2016. 12. 22. 16:59반응형
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 바이트 초과시
반응형'Technique > RDBMS' 카테고리의 다른 글
MySQL Buffered , Unbuffered Query (0) 2016.12.27 문자셋( Character set )과 콜레이션( Collation ) (0) 2016.12.27 MySQL INET 함수 (0) 2016.11.17 트랜잭션(Transaction) (0) 2016.06.06 슬로우 쿼리 로그 (0) 2016.06.06