DB 인덱스가 있어도 왜 안 탈까? EXPLAIN ANALYZE로 확인해본 옵티마이저 판단
DB 성능 문제를 볼 때 제일 먼저 떠오르는 게 인덱스다.쿼리가 느리다.그러면 일단 where 조건에 걸린 컬럼을 보고 “여기 인덱스 없나?”부터 확인하게 된다.그런데 막상 인덱스를 만들어도 쿼리가 빨라지지 않는 경우가 있다.처음에는 이게 좀 이상했다.분명히 인덱스가 있는데 왜 안 쓰지?DB가 못 찾는 건가?아니면 인덱스를 잘못 만든 건가?보다 보니 이유는 단순했다.DB는 인덱스가 있다고 무조건 쓰지 않는다.옵티마이저가 봤을 때 인덱스를 타는 것보다 테이블을 그냥 읽는 게 더 낫다고 판단하면 Seq Scan을 선택한다.PostgreSQL 공식 문서에서도 EXPLAIN은 쿼리 플래너가 어떤 실행 계획을 만들었는지 보여주는 명령이라고 설명한다.실행 계획에는 테이블을 순차 스캔할지, 인덱스 스캔할지 같은 정보..