logo

2. 커버링 인덱스 (WHERE + ORDER BY / GROUP BY + ORDER BY )

language-logoMySQL

• MySQL에서는 인덱스 생성 시 컬럼마다 asc/desc를 정할 수 있는 것처럼 보이지만, 8.0 이전 버전까지는 실제로 Desc 인덱스를 지원하지 않는다. 인덱스 컬럼 중 특정 컬럼만 Desc가 되지 않으며, 인덱스 컬럼 전체를 asc 혹은 desc 스캔 방법뿐이다.
• WHERE와 ORDER BY를 사용할 때 인덱스가 적용되지 않는 경우는 인덱스 첫번째 컬럼이 누락되어 사용 불가, 인덱스에 포함된 특정 컬럼이 미포함되어 사용 불가, 인덱스 컬럼과 ORDER BY 컬럼간 순서 불일치로 사용 불가, 인덱스에 존재하지 않는 컬럼으로 인해 사용 불가 등이 있다.
• MySQL에서 WHERE 절에 사용된 인덱스 컬럼이 동등 비교가 아니면 ORDER BY 절은 인덱스가 수행되지 않는다. 하지만 WHERE 절에 사용된 인덱스 컬럼이 동등 비교가 아니더라도, ORDER BY에 모든 인덱스 컬럼이 포함되면 file sort가 없는 실행 계획이 나온다.
• 커버링 인덱스를 사용하면 쿼리 성능이 크게 향상된다. 즉, 쿼리에 포함된 모든 컬럼이 하나의 인덱스에 포함된 컬럼인 경우에는 아주 개선된 성능을 확인할 수 있다. 따라서 ORDER BY 역시 최대한 커버링 인덱스를 이용해야 한다.

thumbnail
북마크
공유하기
신고하기
10분 분량
조회수 182
profile-image향로
2년 전
Copyright © 2025. Codenary All Rights Reserved.