오늘 진행한 학습 요약
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) 실행 순서
- FROM → 2. WHERE → 3. GROUP BY → 4. HAVING → 5. SELECT → 6. ORDER BY → 7. LIMIT
-
순서절(Clause)설명1from주 테이블 선택합니다.2where기본 데이터를 필터링합니다.3group by기본 데이터를 집계합니다.4having집계된 데이터를 필터링합니다.5select최종 데이터를 반환합니다.6order by최종 데이터를 정렬합니다.7limit반환되는 데이터를 행 수로 제한합니다.
Index(인덱스)
- 데이터를 빠르게 검색하기 위해 사용하는 자료구조.
- 장점: 빠른 검색 속도 제공.
- 단점: 데이터 변경 시 추가 작업 발생으로 성능 저하 가능.
- 인덱스 종류:
-
Clustered Index Non-Clustered(Secondary) Index 스토리지 데이터 행은 인덱스와 동일한 순서로 정렬되고 저장 인덱스 행과 데이터 행은 별도로 저장 주요 칼럼 일반적으로 고유한 열(primary key) 쿼리에서 자주 사용되는 모든 열 가능 크기 모든 데이터 행 인덱스 키 값, 데이터 행에 대한 포인터 변경 기본 키 열이 변경되면 전체 인덱스를 다시 작성 영향을 받는 인덱스 페이지만 업데이트 성능 순차적 데이터의 광범위한 검색을 더 빠름 소규모 데이터 집합을 검색하거나 데이터를 정렬하고 집계하는 데 더 빠름 주 사용처 primary key, foreign key unique key, 일반적인 index - Clustered Index
- 데이터가 인덱스 순서에 따라 저장.
- Primary Key에 주로 사용.
- Non-Clustered Index
- 데이터와 별도로 저장.
- 자주 사용되는 모든 열에 적용 가능.
- Covering Index
- 인덱스 데이터만으로 결과를 반환.
- Index 활용 기준
- 카디널리티: 고유 값이 많을수록 적합.
- 활용도: 자주 사용되는 경우 적합.
- 복합 인덱스:
- 여러 열을 결합해 사용.
- 순서가 중요하며 3개 이하 컬럼 사용 권장.
- Clustered Index
데이터 검색
- 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 방식
- Nested Loop Join
- 드라이빙 테이블 → 드리븐 테이블을 반복 검색.
- 장점: 인덱스 사용 시 효율적.
- Hash Join
- 해시 테이블을 생성해 키 기반으로 조인.
- 장점: 인덱스가 없을 때 효율적.
- 비교:
- Nested Loop Join: 인덱스 활용. 빠른 단위 검색.
- Hash Join: 전체 데이터 조인 시 효율적.