partition pruning
- 쿼리 조건을 보고 스캔이 필요 없는 파티션을 아예 최적화 시키는 기법.
- 큰 테이블은 물리적으로 여러 파티션으로 나눠서 저장하는 경우가 많음
- 예를들어, user_id 기준으로 해시/레인지 파티셔닝 되어있을 수 있음.
SELECT friend_id FROM steps_friend WHERE user_id = 1;
-
프루닝은, 위의 쿼리에서 1은 p3에만 있다고 계산할수 있으면, p0,p2,p4~ 은 아예 안읽음. 파티션중 1개만 스캔하면 되니까.
-
근데 프루닝을 어케하는거지?
- 파티션을 어떻게 나눴는지 정의(메타데이터)를 DB가 이미 알고있음.
- 파티션 만들때는 규칙을 함께 저장함!
- 그래서 쿼리 실행 시, 옵티마이저가 그 규칙 조건에 값을 대입/계산 후, 매칭되는 파티션만 남기고 나머지는 버림