인덱스를 만들었는데 왜 안 타죠? — 옵티마이저의 비용 계산을 파헤치다인덱스를 걸었는데 풀스캔이 나왔다프로젝트에서 Soft Delete를 쓰고 있었다. 상품 조회 쿼리에 WHERE deleted_at IS NULL 조건이 붙는데, deleted_at에 인덱스를 걸어봤자 EXPLAIN을 찍으면 type: ALL — 풀 테이블 스캔이 나온다.인덱스가 분명히 있는데 왜 안 쓸까? "선택도가 낮아서"라는 답은 알고 있었지만, 왜 선택도가 낮으면 풀스캔이 더 나은 건지 — 그 물리적인 이유를 몰랐다.이번에 옵티마이저의 비용 계산 구조를 파면서, 그 "왜"를 찾았다.옵티마이저 — SQL의 "어떻게"를 결정하는 두뇌SQL을 던지면 MySQL이 바로 실행하는 게 아니다. 3단계를 거친다.SQL 입력 → [1] Par..