Today I Learned

241204 TIL | CS - 데이터베이스

shinelee26 2024. 12. 4. 22:01

오늘 진행한 학습 요약

1. CS특강 - 데이터베이스

  • SQL 실행 절차
  • Index(인덱스)
  • 데이터 검색
  • SQL 실행계획
  • JOIN 방식

 

2. 알고리즘 코드카다  Day50 (작성 생략)

CodingTest Git-hub 링크 : https://github.com/chews26/CodingTest

 


학습 정리

1. CS특강 - 데이터베이스

 

SQL 실행 절차

  • Parser (구문 분석기)
    • 쿼리를 MySQL이 이해할 수 있는 Tree 형태로 분해.
  • Resolver (해석기)
    • 쿼리의 구문과 문법을 체크.
  • Optimizer (최적화)
    • 실행 계획 생성: 읽을 테이블, 인덱스 사용 여부 등을 결정.
  • Query Execution (쿼리 실행)
    • 최적화된 실행 계획에 따라 데이터를 가져옴.
  • 절(Clause) 실행 순서
    1. FROM → 2. WHERE → 3. GROUP BY → 4. HAVING → 5. SELECT → 6. ORDER BY → 7. LIMIT
    2. 순서
      절(Clause)
      설명
      1
      from
      주 테이블 선택합니다.
      2
      where
      기본 데이터를 필터링합니다.
      3
      group by
      기본 데이터를 집계합니다.
      4
      having
      집계된 데이터를 필터링합니다.
      5
      select
      최종 데이터를 반환합니다.
      6
      order by
      최종 데이터를 정렬합니다.
      7
      limit
      반환되는 데이터를 행 수로 제한합니다.

 

Index(인덱스)

  • 데이터를 빠르게 검색하기 위해 사용하는 자료구조.
  • 장점: 빠른 검색 속도 제공.
  • 단점: 데이터 변경 시 추가 작업 발생으로 성능 저하 가능.
  • 인덱스 종류:
  •   Clustered Index Non-Clustered(Secondary) Index
    스토리지 데이터 행은 인덱스와 동일한 순서로 정렬되고 저장 인덱스 행과 데이터 행은 별도로 저장
    주요 칼럼 일반적으로 고유한 열(primary key) 쿼리에서 자주 사용되는 모든 열 가능
    크기 모든 데이터 행  인덱스 키 값, 데이터 행에 대한 포인터
    변경 기본 키 열이 변경되면 전체 인덱스를 다시 작성 영향을 받는 인덱스 페이지만 업데이트
    성능 순차적 데이터의 광범위한 검색을 더 빠름 소규모 데이터 집합을 검색하거나 데이터를 정렬하고 집계하는 데 더 빠름
    주 사용처 primary key, foreign key unique key, 일반적인 index 
     
    1. Clustered Index
      • 데이터가 인덱스 순서에 따라 저장.
      • Primary Key에 주로 사용.
    2. Non-Clustered Index
      • 데이터와 별도로 저장.
      • 자주 사용되는 모든 열에 적용 가능.
    3. Covering Index
      • 인덱스 데이터만으로 결과를 반환.
    4. Index 활용 기준
      • 카디널리티: 고유 값이 많을수록 적합.
      • 활용도: 자주 사용되는 경우 적합.
      • 복합 인덱스:
        • 여러 열을 결합해 사용.
        • 순서가 중요하며 3개 이하 컬럼 사용 권장.

 

 

데이터 검색

  • Full Table Scan: 테이블의 모든 행 검색 (비효율적).
  • Full Index Scan: 인덱스 전체 검색.
  • Full Range Scan: 인덱스의 특정 범위 검색 (효율적).
  • Index Unique Scan: 유니크 인덱스를 사용해 하나의 특정 행 검색.
  • Index Range Scan: 인덱스를 사용해 범위 검색.
  • Index Skip Scan: 복합 인덱스의 후행 열을 기반으로 검색.

 

SQL 실행계획

  • Explain 구문: SQL 쿼리의 실행 계획을 확인.
  • 주요 항목:
    • id: 실행 순서를 구분하는 식별자.
    • select_type: SELECT 유형.
    • type: 검색 방식 (효율성: const > ref > range > all).
    • rows: 조사할 예상 행 수.
    • extra: 추가 정보 (e.g., Using where, Using index).

 

JOIN 방식

  1. Nested Loop Join
    • 드라이빙 테이블 → 드리븐 테이블을 반복 검색.
    • 장점: 인덱스 사용 시 효율적.
  2. Hash Join
    • 해시 테이블을 생성해 키 기반으로 조인.
    • 장점: 인덱스가 없을 때 효율적.
  • 비교:
    • Nested Loop Join: 인덱스 활용. 빠른 단위 검색.
    • Hash Join: 전체 데이터 조인 시 효율적.