어디에 사용할까
인덱스 미사용에서 바꿀 결과와 유지할 기존 동작을 한 문장씩 적습니다. index가 있어도 낮은 selectivity, 함수·형 변환, leading column과 cost 추정 때문에 full scan이 더 싸다고 판단될 수 있습니다.
준비할 내용
기대하는 행·열·순서와 NULL·중복·timezone 처리 계약을 먼저 적고 실제 결과와 execution plan을 별도로 확인합니다. 현재 version의 공식 문서와 실제 설정을 확인하고 대표·경계·실패 사례를 준비합니다. slow query, execution plan, lock wait, connection, buffer hit, WAL/binlog과 디스크 지연을 함께 본다.
| 순서 | 할 일 |
|---|---|
| 1 | 수정 전 결과와 되돌릴 기준 저장 |
| 2 | 핵심 사실과 맞닿은 한 곳만 변경 |
| 3 | 같은 입력으로 수정 전후 비교 |
구현 흐름과 마무리
결과 계약을 만족하는 가장 단순한 query와 짧은 transaction에서 시작하고 index는 실제 predicate·정렬·데이터 분포를 보고 추가합니다. 쿼리 모양과 데이터 분포를 먼저 고치고 index, transaction 범위, pool과 보존 정책을 전체 부하에 맞춘다. 예상과 다르면 변경을 더 얹지 말고 처음 달라진 값으로 돌아갑니다. 운영과 유사한 데이터 분포에서 plan, p95, lock time, rows examined, IOPS와 복구 가능성을 확인한다. 대표값, NULL, 중복, 경계 크기와 필요한 동시 실행에서 결과 정합성을 먼저 확인한 뒤 plan, rows와 I/O 비용을 비교합니다.
공식 문서와 적용 범위
문서의 기본값과 동작은 version에 따라 달라질 수 있습니다. 현재 DB 제품과 version, schema·index·통계 상태, 데이터 분포와 동시 부하에서 다시 확인합니다.