데이터베이스

[mysql] index

엉으니 2016. 2. 12. 06:31

-- 참고 : 생활코딩 mysql수업

--설계시 참고사항 : http://egloos.zum.com/tiger5net/v/5660848

인덱스란?

--색인, 조회할 때 원하는 행을 빠르게 찾을 수 있게 준비해둔 데이터

--일명의 책갈피를 꽂아놓아서 일반 검색보다 더 빠르게 데이터를 가져올 수 있음

--테이블이 쿼리에 있는 컬럼에 대한 인덱스를 갖고있다면, mysql은 모든 데이터를 조사하지않고 데이터 파일의

중간에서 검색위치를 빠르게 잡아낸다.


인덱스의 종류

1. primary key : 중복되지 않는 유일한 키 (ex. id값)

각각의 행을 테이블에서 식별하는 유일무이한 키

가장 고속으로 데이터를 가져올 수 있음


2. unique key : 중복을 허용하지 않는 유일한 키

테이블 전체를 통틀어 중복되지않는 값을 지정해야함 (=primary key)

여러 열의 unique key를 지정할 수 있음

학번과 같은 데이터 ( 중복되지 않음 ) 는 유니크 키가 될 수 있음


3. normal key : 중복을 허용하는 인덱스

중복을 허용하는 키

여러개의 키를 지정할 수 있음 (한번 지정할 때 2개이상의 열을 한번에 지정할 수 있음)


4. foreign key : 다른 테이블과 관계성을 부여 ( FK라고 표현 )

join과 관련


5. full text : 

--스토리지 엔진 중 myisam에서만 사용가능

--한글 검색이 잘 안될 수 있음

--mysql의 기본설정(ft_min_word_len)이 4로 되어있기 때문에 조정이 필요함

예제 >>

테이블 생성시 키 삽입

PRIMARY KEY (`id`), // primary key 지정

UNIQUE KEY `idx_number` (`number`) USING BTREE, // unique key 지정

KEY `idx_department` (`department`), // 일반키 지정

KEY `idx_department_name` (`department`,`address`), // 일반키 여러열 지정

FULLTEXT KEY `idx_introduction` (`introduction`) // 풀텍스트


인덱스를 쓰는 방법

--자주 조회되는 칼럼에 적용

--조회 시 오랜시간을 소모하는 컬럼에 적용

--url과 같이 데이터가 긴 경우에는 디스크상의 용량이 많이 차지하기때문에 중시하지 않음

(데이터가 긴 경우 해쉬와 같이 데이터를 짧게 만드는 방법을 씀)


인덱스를 사용해야 하는 경우

--데이터의 양이 많고 검색이 변경보다 빈번한 경우

--인덱스를 걸고자 하는 필드의 값이 다양한 값을 가지는 경우

반응형

'데이터베이스' 카테고리의 다른 글

[mysql] UNION  (0) 2016.02.18
[mysql] JOIN  (0) 2016.02.18
[mysql] 데이터 조회 (select문)  (0) 2016.02.09
[mysql] 데이터 삽입, 수정, 삭제  (0) 2016.02.02
[mysql] 테이블 생성 및 삭제  (0) 2016.02.02