[SQL 레벨업] 20강. 결합이 느리다면BOOK/SQL 레벨업2024. 2. 6. 20:34
Table of Contents
20강 | 결합이 느리다면
정리
1. 상황에 따른 최적의 결합 알고리즘
알고리즘의 장단점
결합 대상 레코드 수의 관점에서 최적의 결합 알고리즘 정리
- 소규모 - 소규모
- 결합 대상 테이블이 작은 경우에는 어떤 알고리즘을 사용해도 성능 차이가 크지 않다.
- 소규모 - 대규모
- 소규모 테이블을 구동하는 Nested Loops를 사용합니다. 대규모 테이블의 결합키에 인덱스 있는 것이 중요, 내부 테이블의 결합 대상 레코드가 너무 많다면 구동 테이블과 내부 테이블을 변경 도는 hash를 사용해볼 것을 검토
- 대규모 - 대규모
- hash를 사용, 결합 키로 정렬되어 있는 상태라면 Sort Merge를 사용
2. 실행 계획 제어
DBMS마다 실행 계획을 제어할 수 있다. 다만 MySQL은 결합 알고리즘 자체가 Nested Loops 계열밖에 없으므로 따로 선택의 여지가 없다. 그 외, Oracle,Microsoft SQL Server ,PostgreSQL 은 힌트 구로 결합 알고리즘을 제어할 수 있다. DB2는 힌트 구가 없으며, 원칙적으로 사용자가 실행 계획을 제어할 수 없다.
실행 계획을 사용자가 제어하게 되면, 어떤 시점에서 적절했던 실행 계획이 다른 시점에서는 적절하지 못한 경우가 발생,따라서 사람의 판단으로 실행 계획을 고정시켜 버리는 것은 좋지 못하다.
사용자가 실행 계획을 제어할 때는 충분히 검토하고, 시스템의 미래 상황도 예측해서 적절한 실행 계획을 선택해야 한다.
3. 흔들리는 실행 계획
실행 계획을 옵티마이저에게 맡겨도 최적의 실행 계획이 선택되지 않는 경우가 있다. 장기적인 운용 중에 실행 계획이 안좋은 방향으로 변화해버린 것이다. (데이터양 증가,,등의 이유)
따라서 SQL 성능의 변동 위험을 줄이려면 되도록 다른 대체 수단들을 이용해 결합을 피해야한다. ( ex. 서브쿼리 , 대체수단에 대한 구체적인 내용은 다음장에 !)
'BOOK > SQL 레벨업' 카테고리의 다른 글
[SQL 레벨업] 19강 결합 알고리즘과 성능 (1) | 2024.02.05 |
---|---|
[SQL 레벨업] 18강 기능적 관점으로 구분하는 결합의 종류 (1) | 2024.01.30 |
[SQL 레벨업] 16강 SQL에서는 반복을 어떻게 표현할까? (1) | 2024.01.27 |
[SQL 레벨업] 15강 반복계의 공포 (1) | 2024.01.25 |
[SQL 레벨업] 13강 자르기 (1) | 2024.01.23 |
@gani+ :: Gani_Dev :)
꾸준히 기록할 수 있는 사람이 되자 !