1. 인덱스 필드 가공
인덱스 필드에 가공이 들어가면 인덱스로 찾을 수 없음
// age는 int 타입
SELECT *
FROM Member
WHERE age*10 = 1 // 10을 곱하면 검색이 안됨
// age는 int 타입
SELECT *
FROM Member
WHERE age = '1' // type을 잘못 넣어준 경우
2. 복합 인덱스
왼쪽처럼 1개의 인덱스가 아닌 오른쪽처럼 복합 인덱스가 되면?
- 우선적으로 과일 컬럼이 정렬
- 과일 컬럼이 정렬되면 그 안에서 원산지 컬럼이 정렬됨
- 따라서 복합 인덱스에서 중요한 것은 선두 컬럼이다.
- 데이터의 식별 정도가 높은 값이 선두에 있는 것이 좋음
3. 하나의 쿼리에는 하나의 인덱스만
하나의 쿼리에는 하나의 인덱스만 탄다.
여러 인덱스 테이블을 동시에 탐색하지 않음
*index merge hint를 사용하면 여러 인덱스 가능
따라서 WHERE, ORDER BY, GROUP BY 혼합해서 사용할 때에는 인덱스를 잘 고려해야 함
주의
- 의도대로 인덱스가 동작하지 않을 수 있음. explain으로 확인
- 인덱스도 비용이다. 쓰기를 희생하고 조회를 얻는 것
- 꼭 인덱스로만 해결할 수 있는 문제인가?
- 인덱스로 푸는 것이 가장 간단함 (코드의 변경이 없기 때문)
- 조회 조건, 정렬 조건이 많이 바뀌게 됨 → 인덱스로 해결할 수 없는 상황이 올 수 있음
2023 KAKAO Tech Campus_BackEnd 필수 과정
DB(MySQL) 강의 정리 내용입니다.
'CS > 데이터베이스' 카테고리의 다른 글
페이지네이션 최적화 - 03. 오프셋 기반 페이징 구현의 문제(1) (0) | 2023.06.06 |
---|---|
페이지네이션 최적화 - 01. 페이지네이션이란 (0) | 2023.06.06 |
조회 최적화를 위한 인덱스 이해하기 - 04. 클러스터 인덱스 (0) | 2023.06.04 |
조회 최적화를 위한 인덱스 이해하기 - 03. 인덱스 자료구조 (0) | 2023.06.04 |
조회 최적화를 위한 인덱스 이해하기 - 02. 인덱스 기본동작 (0) | 2023.06.04 |