13장 인덱스 샷건

13.1 목표: 성능 최적화

  • 데이터베이스 성능을 향상시키는 가장 좋은 방법은 인덱스를 잘 활용하는 것.

13.2 안티패턴: 무계획하게 인덱스 사용하기

  • 인덱스를 불충분하게 정의하거나 또는 아예 정의하지 않는다.
  • 너무 많은 인덱스를 정의하거나 도움이 되지 않는 인덱스를 정의 한다.
  • 어떤 인덱스도 도움이 될 수 없는 쿼리를 실행한다.

13.3 안티패턴 인식 방법

  • "이게 내 쿼리인데, 어떻게 빠르게 할 수 있을까?"
  • "모든 필드에 인덱스를 걸었는데, 왜 빠르지 않은 거지?"
  • "인덱스가 데이터베이스를 느리게 만든다는 것 들었어. 그래서 나는 인덱스를 사용하지 않지."

13.4 안티패턴 사용이 합당한 경우.

  • 없다.

13.5 해법: 인덱스를 MENTOR하라

  • MENTOR(Measure, Explain, Nominate, Test, Optimize, Rebuild)

측정(Measure)

  • 프로파일링 해라.
  • Oracle(TKProf), SQL Server(SQL Server Profiler), MySQL(slow query log), PostgreSQL(pgFouine)

실행계획확인(Explain)

  • 옵티마이저를 통해 쿼리가 사용할 인덱스를 고른다. 데이터베이스의 이런 분석 결과를 리포트로 볼 수 있는데, 이를 쿼리 실행계획이라 한다.

지명(Nominate)

  • 쿼리에서 인덱스를 사용하지 않고 테이블에 접근하는 부분을 살펴 봐라.

테스트(Test)

  • 인덱스를 생성한 후, 쿼리를 다시 프로파일링 해라.

최적화(Optimize)

  • 인덱스는 빈번하게 사용되는 데이터 구조로, 캐시 메모리에 보관할 좋은 후보다.
  • 캐시 메모리에 보관할 수 있는 방안을 검토.

재구성(Rebuild)

  • 시간이 지나면서 데이터를 업데이트하고 삭제함에 따라, 인덱스도 점점 균형을 잃는다.
  • 인덱스를 최대한 활용하기 위해 주기적으로 인덱스를 리빌드 해라.

문서에 대하여

  • 최초작성일 : 2011년 12월 10일
  • 이 문서는 오라클클럽 코어 오라클 데이터베이스 스터디 모임에서 작성하였습니다.
  • {*}이 문서의 내용은 인사이트(insight) 에서 출간한 'SQL AntiPatterns : 개발자가 알아야 할 25가지 SQL 함정과 해법'를 참고하였습니다.*