총 게시물 12건, 최근 0 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[TIP&TECH]

MySQL 인덱스(INDEX) 정리 (3)

글쓴이 : 앱개발재밌어 날짜 : 2013-09-30 (월) 22:07 조회 : 10663
글주소 : http://www.androidside.com/B19/10
 
  아마존 AWS 공식사이트
AWS 클라우드 데이터베이스, 저렴한 비용, 쉬운 관리, 지금 1년무료체험 신청!
aws.amazon.com/ko/
  KGIT뱅크학원 교육수강문의
IT뱅크학원 방문상담예약, 중고생대학입시, 컴공전공대비, 정보보안, 국비IT취업
www.hrditbank.kr
  G마켓 MYSQL
올 봄 쇼핑을 바꾸는 쇼핑! G마켓 웰컴 30%쿠폰, 매일 초강력 슈퍼딜! G마켓
www.gmarket.co.kr
신청하기



MySQL 인덱스(INDEX) 사용 방법 


인덱스는 특정 칼럼 값을 가지고 있는 열을 빠르게 찾기 위해서 사용된다. 


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) 






앱개발재밌어 님의 데이터베이스 최신글 [더보기]


추천 버튼을 클릭하면 추천한 자와 추천받은 자 모두에게 포인트가 지급됩니다.

quki 2015-08-31 (월) 14:26
유용한 정보 감사합니다
댓글주소
hi
이전글  다음글  목록 글쓰기

총 게시물 12건, 최근 0 건 안내 RSS
번호 분류 제목 글쓴이 날짜 추천 비추천 조회
12 TIP&TECH
char대신 varchar를 쓰는이유??http://okky.kr/article/217655 정리가 잘되있는거 같아서 링크를 가지고 와봤습니다. char…
이힝힝 08-08 1 0 2706
11 소스코드
아래는 java 파일에 sql 쿼리문을 작성한 부분입니다. 여기서 궁금한게 DATETIME 은 테이블내에 있는 DATE 형식의 컬럼…
아르페우스 11-16 1 0 3535
10 TIP&TECH
기능설명 :   A 서버에 A DB와 B 서버에 B DB가 있을경우   1. A서버의 ADB에 테이블에 데이…
카이로 11-26 4 0 9075
9 TIP&TECH
### 원격서버의 MYSQL데이테베이스 백업하기   1) 원격서버의 MYSQL데이테베이스 백업하기 (기본포트 사…
카이로 07-12 6 0 8200
8 TIP&TECH
MySQL 인덱스(INDEX) 사용 방법  인덱스는 특정 칼럼 값을 가지고 있는 열을 빠르게 찾기 위해서 사용된다.&n…
앱개발재밌어 09-30 2 0 10664
7 TIP&TECH
1. 인덱스를 검사하는 법. explain select * from Table_Name where A='a' and B='b' order by C,D,E ; 해당 쿼리문이 인덱스를 …
앱개발재밌어 09-30 0 1 9441
6 TIP&TECH
INDEX의 의미?   RDBMS에서 검색속도를 높이기 사용하는 하나의 기술이입니다. INDEX는 색인입니다. 해당 TABLE의 …
앱개발재밌어 09-30 4 0 13659
5 TIP&TECH
안녕하세요. 디비구조를 만만하게 생각하고, 엑셀로 끄적이며 설계해보려 했으나, 만만하지가 않더군요. …
앱개발재밌어 09-26 0 0 10115
4 소스코드
샘플긁어 온건데 테스트 함 해보세요
레오니아 08-08 14 0 11729
3 강좌
출처 : http://www.phpschool.com/bbs2/inc_view.html?id=9464&code=tnt2[MYSQL] LIKE vs INSTR()0. 배경1. 영문 검색어 테스트  1-1…
카이로 04-29 2 0 9652
2 강좌
아래 내용은 Ubuntu/GNU Linux 11.04 를 기반으로 한다. - MySQL 서버 중지 후 데이터 디렉토리의 내용을 새 디렉토리로 …
카이로 04-25 0 0 9549
1 강좌
ibdata1 파일은 MySQL의 innodb 로그 파일로 줄일 수 없다. 단, 다음 과정을 통해 삭제 후 재생성할 수 있다. 1. 전체 데…
카이로 04-25 0 0 14792
 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기