인덱스 없는 WHERE 경험 + 실행 계획 분석 + 통계 오래됐을 때 문제 + 긴 트랜잭션 락 경험
팀 프로젝트에서 처음으로 대용량 테이블에 SQL 쿼리를 작성하면서 단순히 결과가 맞는 것과 성능이 좋은 것이 다르다는 걸 경험했습니다. 인덱스 측면에서는 WHERE 조건에 인덱스가 없는 컬럼을 쓰면 전체 테이블 스캔이 일어나는 걸 실행 계획으로 처음 확인했습니다. 실행 계획 측면에서는 EXPLAIN 결과를 읽으면서 조인 순서와 인덱스 사용 여부를 파악하는 습관이 생겼습니다. 통계 측면에서는 테이블 통계가 오래됐을 때 옵티마이저가 잘못된 실행 계획을 선택하는 경우가 있다는 걸 배웠습니다. 트랜잭션 측면에서는 불필요하게 긴 트랜잭션을 유지하면 락 경합이 생겨 다른 쿼리가 대기하는 문제를 경험했습니다. 쿼리를 작성할 때는 먼저 데이터 볼륨과 접근 패턴을 파악하는 것이 최적화 방향을 잡는 데 중요하다는 걸 배웠습니다.
SQL은 원하는 결과를 얻는 것보다 어떻게 가져오는지가 더 중요한 언어라는 걸 그때 배웠습니다.