[SQL 레벨업] 20강. 결합이 느리다면

2024. 2. 6. 20:34·BOOK/SQL 레벨업

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
'BOOK/SQL 레벨업' 카테고리의 다른 글
  • [SQL 레벨업] 19강 결합 알고리즘과 성능
  • [SQL 레벨업] 18강 기능적 관점으로 구분하는 결합의 종류
  • [SQL 레벨업] 16강 SQL에서는 반복을 어떻게 표현할까?
  • [SQL 레벨업] 15강 반복계의 공포
gani+
gani+
꾸준히 기록할 수 있는 사람이 되자 !
  • gani+
    Gani_Dev :)
    gani+
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • 당장 프로젝트 (2)
        • 트러블슈팅 (0)
      • 댕댕어디가 프로젝트 (11)
        • 트러블슈팅 (3)
        • MSA (8)
      • 개발일지 (2)
      • BOOK (12)
        • SQL 레벨업 (10)
      • 프로젝트 (0)
      • ELK (5)
      • 알고리즘 (9)
      • CS (2)
        • 디자인패턴 (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    후기
    알고리즘
    SWMaestro14
    해쉬
    SW마에스트로
    DP
    9095
    섬의개수
    4963
    최단경로
    소마
    14기
    백준4963
    이진탐색
    정렬
    dfs
    4673
    순차탐색
    백준
    이것이코딩테스트다
    완전탐색
    다이나믹프로그래밍
    플로이드워셔
    이것이 코딩 테스트다
    다익스트라
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gani+
[SQL 레벨업] 20강. 결합이 느리다면
상단으로

티스토리툴바