[SQL] INDEX 인덱스

지니·2024년 1월 11일
1

SQL

목록 보기
2/5

인덱스(index)란?

인덱스(index)는 테이블에서 원하는 데이터를 쉽고 빠르게 찾기위해 사용한다. mysql은 데이터를 검색할때 첫번째 필드부터 차례대로 테이블 전체를 검색한다. 따라서 테이블이 클수록 데이터를 탐색하는 시간이 많이 늘어나게된다. 인덱스를 사용하면 테이블 전체를 읽지 않고 검색과 질의에 대한 처리가 빠르게 이루어진다. 이러한 인덱스는 사용자가 직접 접근할 수 없으며, 검색과 질의에 대한 처리에서만 사용된다.

주의 : 인덱스가 포함한 데이터의 삽입 삭제 수정 작업이 원본테이블에서 이뤄질 경우, 인덱스도 같이 수정되어야 하므로 인덱스는 수정보다는 검색이 자주 사용되는 테이블에서 사용하는 것이 더 좋다.

[ 인덱스(index)의 장점과 단점 ]

<장점>

  • 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다.
  • 전반적인 시스템의 부하를 줄일 수 있다.

<단점>

  • 인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하다.
  • 인덱스를 관리하기 위해 추가 작업이 필요하다.
  • 인덱스를 잘못 사용할 경우 오히려 성능이 저하되는 역효과가 발생할 수 있다. ( update와 delete가 많이 발생하는 테이블이라면, update와 delete는 기존의 인덱스를 삭제하지않고 '사용하지않음'처리를 해주기 때문에 실제데이터보다 인덱스는 훨씬 많이 존재하게됨. sql 처리시 비대해진 인덱스에 의해 오히려 성능이 떨어지게됨)

인덱스(index) 생성

create문을 사용하여 인덱스(index)를 생성한다.

CREATE INDEX 인덱스이름
ON 테이블이름 (필드이름1, 필드이름2, ...)

CREATE INDEX NameIdx On user(Name);

인덱스(index) 보기

SHOW INDEX FROM 테이블이름

  1. Table : 테이블의 이름을 표시함.

  2. Non_unique : 인덱스가 중복된 값을 저장할 수 있으면 1, 저장할 수 없으면 0을 표시함.

  3. Key_name : 인덱스의 이름을 표시하며, 인덱스가 해당 테이블의 기본 키라면 PRIMARY로 표시함.

  4. Seq_in_index : 인덱스에서의 해당 필드의 순서를 표시함.

  5. Column_name : 해당 필드의 이름을 표시함.

  6. Collation : 인덱스에서 해당 필드가 정렬되는 방법을 표시함.

  7. Cardinality : 인덱스에 저장된 유일한 값들의 수를 표시함.

  8. Sub_part : 인덱스 접두어를 표시함.

  9. Packed : 키가 압축되는(packed) 방법을 표시함.

  10. Null : 해당 필드가 NULL을 저장할 수 있으면 YES를 표시하고, 저장할 수 없으면 ''를 표시함.

  11. Index_type : 인덱스에 사용되는 메소드(method)를 표시함.

  12. Comment : 해당 필드를 설명하는 것이 아닌 인덱스에 관한 기타 정보를 표시함.

  13. Index_comment : 인덱스에 관한 모든 기타 정보를 표시함.

profile
지니의 개발노트

0개의 댓글