InnoDB의 인덱스 생성 방식인 Left-Most를 기준으로, 최대한 인덱스 탐색을 줄이는 방향으로 인덱스를 생성
( Left-Most : 왼쪽을 기준으로 오른쪽 칼럼을 정렬함, 따라서 인덱스 칼럼의 순서는 쿼리 속도 향상에 매우 중요 )
최대한 range스캔을 태워서 필요한 값의 인덱스 스캔만 하도록 하되
Index Full Scan이 나더라도, 테이블 Full Scan은 막자
age_limit이 ADULT이고, 가격이 10000원 이하이며, 만족도와, 할인율을 오름차순으로 정렬한 데이터를 최대 20개 가져오는 쿼리
create index idx_dynamic_product_query ON products (age_limit desc, price_value desc, buy_satisfy desc, discount desc);

Order By에서 인덱스가 적용안되는 경우
인덱스가 (a, b, c) 인 경우
order by b, c : 첫번째 칼럼인 a가 누락되어서 사용 불가
order by a, c : 인덱스에 포함된 b칼럼이 a,c 사이에 미포함되어서 사용 불가
order by a, c, b : 인덱스 칼럼과 order by 칼럼간 순서 불일치로 사용불가
order by a, b desc, c : b칼럼의 desc로 인해서 사용 불가
order by a, b, c, d : 인덱스에 존재하지 않는 칼럼 d로 인해 사용 불가
아래 쿼리는 인덱스 적용 가능
WHERE a = 1
ORDER BY b, c
WHERE a = 1 and b = 'b'
ORDER BY c
index의 trade-off 인 insert, update, delete문의 효율감소의 경우는
비동기로 처리할 수 있고, 서비스의 우선순위 고려( 페이지 조회시 성능이 더 중요할경우 )
'DB > RDB' 카테고리의 다른 글
| index, 테이블 엑세스, 인덱스 손익분기점 (0) | 2025.04.22 |
|---|---|
| MySQL 조회시 플로우 (0) | 2025.04.18 |
| select할때, 전체범위 처리 & 부분범위 처리 (0) | 2025.04.18 |
| SQL튜닝 (0) | 2025.04.17 |
| SQLD 자격증 (0) | 2025.04.17 |