SQL 튜닝의 시작 (2013년)
인덱스 컬럼 순서와 ORDER BY절 순서를 맞추자 0 0 99,999+

by 구루비스터디 PAGINATION ORDER BY [2018.07.14]


인덱스 컬럼 순서와 ORDER BY 순서를 맞추자

  • 온라인 화면에 적용하는 페이지 처리가 효율적인 수행이 되기 위한 또 다른 필수 요건은 Where 절에서 처리하는 조건과, 인덱스의 컬럼 구성순서, 그리고 Order By 절 순서가 일치 해야 한다는 것이다. 그런데 From절에 여러 테이블이 존재할 경우, 반드시 위의 내용을 가진 테이블부터 수행되어야 한다. 이해를 돕기 위해 예를 들어 설명하도록 하겠다. 아래와 같은 상황의 SQL 이 있다 가정하자.


부분범위 처리가 불가능한 예
  • WHERE 조건 : A, B 컬럼에 대한 조건이 있음. (둘 중 하나가 =조회가 아님)
  • 인덱스 순서 : A, B, C, D 순으로 된 결합 인덱스 존재 (인덱스 컬럼 중 A, B 사용)
  • ORDER BY : C, D 인덱스 컬럼 중 A, B 는 제외한 나머지 컬럼으로 정렬


  • 위의 예와 같이 Where 절 조건 컬럼인 A, B 둘 중 하나라도 EQUAL 조회가 아닌 경우에는 부분범위 처리가 불가하다.
  • 왜냐하면, 데이터가 C, D 순으로 정렬될 경우 인덱스 컬럼 중 선행 컬럼인 A 나 B 가 EQUAL 조회가 아니라면, 인덱스가 가진 정렬을 이용할 수 없기 때문이다.
  • 즉, A 와 B 컬럼 모두 EQUAL 조회를 했다면 Order By 절에 C, D 컬럼만 있어도 인덱스의 정렬된 데이터를 정렬 처리에 사용할 수 있지만 만약, A, B 컬럼 중 A 컬럼이 EQUAL 조회가 아니라면 Order By 절을 C, D 에서 A, B, C, D 로 변경해야 인덱스의 정렬된 데이터로 정렬 처리를 대체할 수 있어 부분범위 처리가 가능해진다.
  • 앞에서 알아 본 Where 절, 인덱스 구성, Order By 절의 구성이 부분범위 처리가 가능한 경우를 정리하면 아래와 같다.


부분범위 처리가 가능한 예
  • WHERE 조건 - A, B (둘 중 하나라도 =조회가 아닌 경우)
  • 인덱스 순서 - A, B, C, D 인덱스 컬럼 중 A, B 사용
  • ORDER BY - A, B, C, D 인덱스 컬럼 중 모두 정렬
"데이터베이스 스터디모임" 에서 2013년에 "SQL튜닝의시작 " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3832

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입