SQL JOIN : 성능에 영향을 주는 요소들
👉 JOIN문 성능에 영향을 주는 요소들
- 인덱스 사용
- 인덱스는 JOIN 연산의 속도를 크게 향상시킬 수 있음
- JOIN에 사용되는 컬럼에 인덱스가 있으면, 데이터베이스는 더 빠르게 필요한 행을 찾을 수 있음
- ➕ 어디에 인덱스가 설정되어 있어야 하는지?
- JOIN 조건에 사용되는 컬럼
- JOIN 되는 모든 테이블들에 인덱스를 설정하는 것이 좋으나 항상 가능하거나 필요한 것은 아님
- WHERE 절에 사용되는 컬럼
- ORDER BY 및 GROUP BY 절의 컬럼
- 테이블의 크기와 행 수
- JOIN에 참여하는 테이블의 크기와 행의 수가 많을수록 JOIN 연산에 더 많은 시간이 소요
- JOIN 조건의 중요성
- 복잡하거나 비효율적인 JOIN 조건은 성능을 저하시킬 수 있음
- 간단하고 명확한 조건을 사용하는 것이 좋음
- 데이터 분포와 선택도의 역할
- 데이터의 분포와 JOIN 컬럼의 선택도(유니크한 값의 비율)도 성능에 영향을 줌
- 높은 선택도를 가진 컬럼을 JOIN 조건으로 사용하면 더 효율적일 수 있음
- ➕ 선택도란?
- 특정 조건에 의해 필터링 되는 데이터의 비율을 의미
- 어떤 컬럼에 대한 쿼리 조건이 전체 행 중 소수의 행만을 반환한다면, 이 조건은 높은 선택도를 가진 것 ⇒ 일반적으로 인덱스의 효율성을 높임
- 반대로, 많은 수의 행을 반환하는 조건은 낮은 선택도를 가짐
- 쿼리 최적화기의 역할
- 데이터베이스의 쿼리 최적화기는 실행 계획을 결정하며, 이는 JOIN의 성능에 큰 영향을 줌
- 최적화기는 통계 정보를 바탕으로 최적의 JOIN 방법을 선택
- JOIN 유형
- INNER JOIN, LEFT JOIN, RIGHT JOIN 등 JOIN의 유형도 성능에 영향을 줌
- 서브쿼리와 임시 테이블의 사용
- JOIN에 서브쿼리나 임시 테이블이 포함되어 있으면, 이들의 처리 시간이 전체 성능에 영향을 줌
- 선행 테이블
- 일반적으로 더 적은 수의 행을 가진 테이블이나, 더 효율적인 인덱스 접근을 제공하는 테이블을 선행 테이블로 선택하는 것이 좋음
- 적절한 인덱스가 있는 테이블을 선행 테이블로 사용하면, JOIN 연산의 성능을 크게 향상시킬 수 있음
- 쿼리 작성자가 직접 선행 테이블을 지정하는 것은 일반적이지 않으며, 대부분의 경우 최적화기의 결정을 따름