Full-Stack/Back-end

Mysql Index 사용방법

필군~ 2008. 8. 3. 19:08

MySQL Index

WHERE절에서 조건으로 쓰이는 컬럼을 인덱스로 만드는 것이 좋고, AND 연산으로 검색되는 컬럼들은
모두 하나의 인덱스로 만드는 것이 좋다.

Index 생성

  • 테이블 생성시

    mysql> CREATE TABLE tablename (id CHAR(13) NOT NULL,
        passwd CHAR(8) NOT NULL,
        name CHAR(8) NOT NULL,
        email CHAR(64) NOT NULL,
        INDEX (id)
    );
    
    id 컬럼에 대한 인덱스를 생성한다.
    두 개 이상의 컬럼에 대해서도 인덱스를 생성할 수 있다.

    INDEX(id, passwd)
    
    id 컬럼과 passwd 컬럼을 AND 조건으로 검색할 때 인덱스가 작동한다.

  • 테이블 생성 후 추가

    mysql> ALTER TABLE tablename ADD INDEX index_name(col1, col2,...);
    
    index_name으로 인덱스 추가.

인덱스 정보 보기

mysql> SHOW INDEX FROM tablename;

인덱스 삭제

mysql> ALTER TABLE tablename DROP INDEX index_name;

[출처] [펌]MySQL Index|작성자 따라쟁이


Index 관련 SQL statement

alter table test drop index num;
create index num_idx on tablename(field(length));
alter table t add index t_idx(id)
alter table table_name add index(col_name,...) ;

- create table문
create table test(
test1 int not null auto_increment primary key(test1), /* 프라이머리키 설정 */
test2 char(1),
test3 char(2),
index idx_test2(test2), /* test2필드를 idx_test2라는키이름으로 인덱스설정 */
index idx_test23(test2,test3) /*test2,test3필드를 idx_test23이라는 키이름으로 복합인덱스설정 */
); 

show index 명령시 ( show index from table_name )
컬럼이름 : 설명

Table : 테이블이름.
Non_unique : unique 여부. (0이면 unique 한값이구, 1이면 아님다.)
Key_Name : 인덱스키 이름.
Seq_In_Index : 인덱스안의 칼럼순서 (흠. 맞는건지..여튼 인덱스안의 컬럼순서번호 라는군요. 첨시작할시는 1)
Column_Name : 컬럼이름.
Collation : 인덱스가 소트가 되어있는가인데...A는 순차적이고 NULL은 안소트라는군요..
Cardinality : 인덱스의 유니크한값이라고 되어있네요!! 업데이트는 isamchk -a 일때라고 하는데...흠 (-,.-)a
Sub_part : 인덱스된 문자의 번호...인덱스중에서 부분문자열로 인덱스한거 그거말하나바여 ^^;;
Packed : 팩되었나?
Comment : 헉! 코멘트까졍?