CodingSpace

[얄코/갖고노는 MySQL 데이터베이스] Chapter 4. MySQL 더 깊이 알아가기 - #3. 인덱스 - 검색을 빠르게! 본문

Online Class/갖고노는 MySQL 데이터베이스

[얄코/갖고노는 MySQL 데이터베이스] Chapter 4. MySQL 더 깊이 알아가기 - #3. 인덱스 - 검색을 빠르게!

개발자_조이킴 2022. 9. 9. 00:11


What:

  • 인덱스
  • 특정 컬럼(들)에 대한 목차 생성 - 검색 가속화
  • 테이블 내용변경(추가, 수정, 삭제)시 시간 더 소모
  • 기본키(PRIMARY KEY)는 기본적으로 인덱스가 걸려있음 → 따라서 PRIMARY KEY를 기준으로 데이터 검색은 빠름!

 

-- 인덱스 생성
ALTER TABLE (테이블명)
ADD INDEX (인덱스명) (인덱스를 적용시킬 컬럼명)

ex)
ALTER TABLE `mydatabase`.`businesses`
ADD INDEX index_biz_name (business_name);

-- 다중 컬럼 인덱스
ALTER TABLE menus
ADD INDEX index_name_cal (menu_name, kilocalories);

-- 인덱스 조회
SHOW INDEX FROM businesses;

-- 인덱스 삭제
ALTER TABLE businesses
DROP INDEX index_biz_name;
  • 인덱스를 사용하기 적합한 곳
  • 데이터 변경이 잦지 않은 테이블
  • WHERE, ORDER BY에 자주 사용되는 컬럼
  • JOIN에 사용되는 컬럼
  • Cardinality가 높은 컬럼 = 중복도가 낮은 컬럼 (B-Tree 경우)
    • 성별: 부적합
    • 이름: 적합
  • 인덱스의 종류
  • B-Tree 인덱스
    • 기본(default) 인덱스
    • Cardinality가 높은 컬럼에 적합 
    • 편의성 - 복잡한 쿼리 사전 구현
  • Full-Text 인덱스
    • 다수의 단어 등을 포함하는 컬럼에서 단어 및 구문을 검색하기 위함
    • 데이터를 일정 단위로 분할하여 인덱싱
    • InnoDB, MyISM에서만 사용 가능
    • CHAR, VARCHAR, TEXT 컬럼에만 적용 가능
    • Full-Text Index 문서 링크
  • Hash 인덱스 
    • 일치 여부만 확인 (= 가능, >, >=, <, <=, LIKE 등 불가)
    • 인덱스 크기가 작고 검색이 매우 빠름
    • MEMORY, NDB 엔진에서만 사용 가능
  • 비트맵 인덱스 
    • Cardinality가 낮은 컬럼에 적합
    • MySQL에는 없음

References. 


For Developer. 

  • 잘못되거나 부족한 부분이 있다면 언제든지 댓글 부탁드립니다 :)
Comments