인덱스
- 특정 컬럼(들)에 대한 목차 생성 - 검색 가속화
- 테이블 내용변경(추가, 수정, 삭제)시 시간 더 소모
- 내용변경이 자주있는 테이블은 인덱스를 추가하지 않는 것이 좋다.
1. 인덱스 사용하기
-- 인덱스 생성
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;
2. 인덱스를 사용하기 적합한 곳
- 데이터의 변경이 잦지 않은 테이블
- WHERE, ORDER BY 에 자주 사용되는 컬럼
- JOIN에 사용되는 컬럼
- ⭐ Cardinality가 높은 컬럼 = 중복도가 낮은 컬럼 (B-Tree 경우)
- 성별: 부적합, 이름: 적합
3. 인덱스의 종류
1. B-Tree 인덱스
- 기본(default) 인덱스
- Cardinality가 높은 컬럼에 적합
2. Full-Text 인덱스
ALTER TABLE ratings
ADD FULLTEXT INDEX index_full_text (comment);
SELECT * FROM ratings
WHERE MATCH(comment) AGAINST ('괜찮은데');
- 다수의 단어 등을 포함하는 컬럼에서 단어 및 구문을 검색하기 위함
- 데이터를 일정 단위로 분할하여 인덱싱
- *InnoDB, MyISM에서만 사용 가능
- CHAR, VARCHAR, TEXT 컬럼에만 적용 가능
3. Hash 인덱스
- 일치 여부만 확인 (= 가능, >, >=, <, <=, LIKE 등 불가)
- 인덱스 크기가 작고 검색이 매우 빠름
- MEMORY, NDB 엔진에서만 사용가능
- InnoDB 엔진에서는 내부적으로 Adoptive Hash Index 구현
- 자주 사용되는 데이터만 내부적으로 해시값 생성하여 속도 증가
- InnoDB 엔진에서는 내부적으로 Adoptive Hash Index 구현
4. 비트맵 인덱스
- Cardinality가 낮은 컬럼에 적합
- MySQL에는 없음
'프로그래밍 강의 메모 > 갖고노는 MySQL 데이터베이스 by 얄코' 카테고리의 다른 글
MySQL 더 깊이 알아가기 > 사용자와 권한 다루기 (0) | 2022.05.05 |
---|---|
MySQL 더 깊이 알아가기 > 트랜잭션 - 함께가 아니면 하지 않아! (0) | 2022.05.05 |
MySQL 더 깊이 알아가기 > 뷰 - 가상의 테이블 (0) | 2022.05.04 |
MySQL 더 깊이 알아가기 > 기본키와 고유키, 그리고 외래키 (0) | 2022.05.04 |
데이터 조작하기 > 데이터 변경, 삭제하기 (0) | 2022.05.04 |