Top

[MySQL] 인덱스(INDEX) 사용 방법 | Web-Programing
김경훈 (admin) | Editor | 2013/01/14 13:18:38 | 조회:3556

 MySQL 인덱스(INDEX) 사용 방법 Posted by naddru

        인덱스는 특정 칼럼 값을 가지고 있는 열을 빠르게 찾기 위해서 사용된다.
        MySQL은 첫 번째 열부터 전체 테이블에 걸쳐서 연관된 열을 검색하기 때문에
        테이블이 크면 클 수록 비용이 엄청나게 늘어난다.

        만약 테이블이 쿼리에 있는 컬럼에 대한 인텍스를 가지고 있다면,
        MySQL은 모든 데이터를 조사하지 않고도 데이터 파일의 중간에서 검색위치를 빠르게 잡아낼 수 있다. 

        대부분의 MySQL 인덱스는 B-트리에 저장되며 그 종류는
        PRIMARY KEY, UNIQUE, INDEX, FULLTEXT 가 있다.

인덱스를 사용하는 이유 

WHERE 구문과 일치하는 열을 빨리 찾기 위해서.

열을 고려 대상에서 빨리 없애 버리기 위해서. 

조인 (join)을 실행할 때 다른 테이블에서 열을 추출하기 위해서.

특정하게 인덱스된 컬럼을 위한 MIN() 또는 MAX() 값을 찾기 위해서.

사용할 수 있는 키의 최 좌측 접두사 (leftmost prefix)를 가지고 정렬 및 그룹화를 하기 위해서.

데이터 열을 참조하지 않는 상태로 값을 추출하기 위해서 쿼리를 최적화 하는 경우에.

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

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

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

 

   인덱스의 사용 

 

  기존의 테이블에 인덱스를 추가하기 

ALTER TABLE  테이블명 ADD INDEX(필드명(크기)); 

 

mysql> ALTER TABLE temp ADD INDEX(keyword(20));

Query OK, 554604 rows affected (1.31 sec)

Records: 554604  Duplicates: 0  Warnings: 0

 
  테이블 생성시 인덱스 추가하기 
CREATE TABLE 테이블 명 ( 필드명 데이터타입(데이터크기), 
INDEX(필드명(크기)) ENGINE MyISAM; 
 
mysql> CREATE TABLE test (
    -> keyword varchar(20),
    -> INDEX(keyword(20)))
    -> ENGINE MyISAM;
Query OK, 0 rows affected (0.11 sec)
 
  FULLTEXT 인덱스 만들기 
일반적인 인덱스와는 달리 MySQL의 FULLTEXT는 매우 빠르게 모든 텍스트 열을 검색한다. 검색 엔진과 유사한 방법으로 자연 언어를 이용해 검색할 수 있는 특별한 인덱스로 모든 데이터 문자열의 단어를 저장하기 때문이다. 
 
참고사항 
FULLTEXT 인덱스는 MySQL의 기본 저장 엔진 타입인 MyISAM 테이블에만 사용된다. 
만약 테이블을 MyISAM 으로 변경해야 된다면 
ALTER TABLE 테이블명 ENGINE = MyISAM; 
FULLTEXT 인데스는 CHAR 와 VARCHAR, TEXT 열로만 생성 가능하다.
 
ALTER TABLE 테이블명 ADD FULLTEXT(필드명)
 
mysql> ALTER TABLE temp ADD FULLTEXT(keyword);
Query OK, 554604 rows affected (1.49 sec)
Records: 554604  Duplicates: 0  Warnings: 0
 
  인덱스의 효과 
인덱스를 걸게 되면, 테이블 생성시에 인덱스의 정보도 만들게되므로 생성속도가 느려진다. 
 

 

비교를 위해서 두개의 테이블을 생성하였다. 하나는 인덱스가 걸려있는 테이블 (test_index) 와 걸려 있지 않은 테이블 (test)이다. 그림을 보면 생성 속도에서 차이가 꽤 나는 것을볼 수 있다. 
 
이런데도 인덱스를 거는 이유는 바로 조건문 등에 대한 SELECT 속도 등에서 차이가 나기 때문이다. 
 
위 테이블의 데이터는 약 55만개의 데이터가 저장되어있다. 그 중에서 '가'로 시작되는 데이터들을 뽑아 오자 
 
SELECT * FROM test WHERE keyword LIKE '가%' ; 
5056 rows in set (0.08 sec) 
 
SELECT * FROM test_index WHERE keyword LIKE '가%' ; 
5056 rows in set (0.01 sec) 
공유하기
공유하기
0
0
0


댓글을 불러오는 중입니다.
▲ 이전글 PHP 함수를 자바스크립트 함수로 구현 진기원 (jjinki) 2013-01-14 18:19:11
▼ 다음글 [인터넷] 루프문으로 생성된 요소에 자바스크립트를 연결하는 방법에 대해 진기원 (jjinki) 2013-01-11 09:33:36