OR Strategy

한 쿼리의 OR이 항상 두 인덱스를 잘 쓰는 것은 아니다

서로 다른 컬럼 조건을 OR로 묶으면 Full Scan 또는 index merge가 선택될 수 있으므로 UNION ALL 후보와 비교한다.

그대로 OR
department_id = 10 OR location_id = 20

옵티마이저가 병합 전략을 고르지 못하면 넓게 읽을 수 있다.

분리 후보
각 조건을 UNION ALL로 분리

각 SELECT가 자기 인덱스를 쓰고, 겹치는 행은 명시적으로 제외한다.

1
조건별 인덱스

department 인덱스와 location 인덱스를 각각 확인한다.

2
중복 제거

두 조건을 모두 만족하는 행이 중복되지 않게 조건을 둔다.

3
실측 비교

OR, index merge, UNION ALL의 실행 계획과 시간을 비교한다.