본문 바로가기
데이터베이스 DB

SQL 튜닝 관련 단어 및 예상 문제

by tovantablack 2024. 12. 16.
728x90
728x90

SQL 처리 과정 : Parsing -> Optimization -> Row source generation -> Execution : 다 하면 hard parsing

Parsing->execution : soft parsing

 

block : I/O의 기본 단위, 제일 작은 단위

 

Sequential Access : 높은 효율 데이터를 순서대로 읽거나 쓰는 방식으로 인덱스 leaf block을 읽는다. Table full scan

Random Access : 낮은 효율, 한 건을 읽기 위해 논리적, 물리적 순서랑 무관하게 한 블럭씩 접근

 

Redo Log File : 데이터 변경사항을 저장, 복구 시 사용

- 로그 스위치 이벤트로 파일이 순환적으로 교체. 

 

 

  • SQL 튜닝의 목적은 무엇이며, 주요 방법은 어떤 것들이 있는가?
    • 목적: 최소의 작업량으로 원하는 결과를 얻는 것.
    • 주요 방법: SQL 재작성, 힌트 추가, 인덱스 생성 또는 변경.
  • Soft Parsing과 Hard Parsing의 차이는 무엇이며, Hard Parsing이 비효율적인 이유는?
    • 차이점: Soft Parsing은 기존 실행 계획을 재사용, Hard Parsing은 새로운 실행 계획 생성.
    • Hard Parsing의 비효율성: 높은 비용 소모.
  • 인덱스는 SQL 성능에 어떤 영향을 미치며, 설정 시 고려해야 할 주요 사항은?
    • 성능 영향: 검색 속도 향상.
    • 주요 고려 사항: 자주 사용하는 컬럼, 높은 카디널리티, 결합 인덱스 구성 시 선행 컬럼 설정.
    • B-tree 인덱싱을 제일 많이 사용함.
  • Clustered Index와 Non-Clustered Index의 차이점은 무엇인가?
    • Clustered Index: 테이블 데이터가 인덱스 순서대로 물리적으로 정렬.
    • Non-Clustered Index: 데이터와 인덱스가 분리되어 저장.
  • Nested Loop Join과 Hash Join의 사용 사례와 특징은 무엇인가?
    • Nested Loop Join: 소규모 데이터, OLTP 시스템에 적합.
    • Hash Join: 대량 데이터, OLAP 시스템에 적합.
  • Access 조건과 Filter 조건의 차이를 설명하시오.
    • Access 조건: 데이터 접근 전에 적용되는 조건.
    • Filter 조건: 데이터 반환 후 추가로 필터링하는 조건.
  • Partitioning의 주요 유형과 각각의 특징은 무엇인가?
    • Range Partitioning: 범위 기반.
    • List Partitioning: 특정 값 그룹 기반.
    • Hash Partitioning: 데이터 분산을 위해 해시 함수 사용.
  • Oracle 실행 계획(Explain Plan)이란 무엇이며, 주요 항목은 어떤 것들이 있는가?
    • 실행 계획: SQL이 데이터를 조회하는 방식에 대한 계획.
    • 주요 항목: Operation(작업유형), E-Rows(예상 행 수), Buffers(I/O 블록 수).
  • Oracle Hint의 역할과 사용 시 유의사항은 무엇인가?
    • 역할: 옵티마이저의 실행 계획을 조정.
    • 유의사항: 실행 환경과 데이터 특성을 고려하여 신중히 사용.
  • SQL 튜닝 과정에서 함수 기반 인덱스(Function-Based Index)의 장단점은 무엇인가?
    • 장점: 특정 함수나 표현식을 기반으로 검색 속도 향상.
    • 단점: 데이터 입력/수정 시 부하 증가.

1. 참/거짓 문제

  • (참/거짓) Soft Parsing은 Hard Parsing에 비해 더 많은 리소스를 소모한다.

2. 빈칸 채우기

  • SQL 튜닝은 최소의 ________으로 원하는 결과를 얻는 것을 목표로 한다.
  • ________ 파티셔닝은 데이터를 특정 값이나 코드에 따라 분류하여 저장한다.

3. 단답형 문제

  • B-Tree 인덱스에서 데이터를 검색할 때 가장 중요한 세 가지 탐색 단계는 무엇인가?
  • Hash Join이 적합한 SQL 쿼리 유형은 무엇인가?

4. 다지선다형 문제

  • 아래 중 Function-Based Index(FBI)의 올바른 사용 사례를 고르시오.
    1. 데이터 입력/수정이 빈번한 테이블.
    2. 자주 사용하는 컬럼에 특정 함수를 적용하여 검색 속도를 높이는 경우.
    3. SELECT 절에 계산식이 포함된 경우.
    4. 읽기보다는 쓰기가 많은 테이블.

5. 정렬 문제

다음 SQL 처리 과정을 올바른 순서로 정렬하시오.

  1. Optimization
  2. Syntax Check
  3. Execution
  4. Semantic Check
  5. Parsing

6. 용어 설명 문제

  • 카디널리티(Cardinality)가 무엇인지 간단히 설명하시오.

7. 코드 분석 문제

다음 SQL 쿼리가 효율적으로 인덱스를 사용하기 위한 개선안을 작성하시오.

sql
코드 복사
SELECT * FROM orders WHERE SUBSTR(order_date, 1, 4) = '2023';

8. 비교 문제

  • Nested Loop Join과 Hash Join의 차이점을 2가지 이상 기술하시오.

9. 예/아니오 문제

  • (예/아니오) Index Organized Table(IOT)은 모든 데이터가 인덱스에 저장되며, 별도의 데이터 테이블이 필요 없다.

10. 사례 문제

다음 조건을 참고하여 적절한 인덱스 설계를 제안하시오.

  • 테이블: 고객 정보(customers)
  • 주요 검색 조건: 고객 이름(name), 생년(birthyear), 휴대폰 번호(mobile)

 

 

 

아래는 위에서 제공한 문제의 답안입니다.


1. 참/거짓 문제

  • (거짓) Soft Parsing은 Hard Parsing에 비해 더 적은 리소스를 소모한다.

2. 빈칸 채우기

  • SQL 튜닝은 최소의 작업량으로 원하는 결과를 얻는 것을 목표로 한다.
  • List 파티셔닝은 데이터를 특정 값이나 코드에 따라 분류하여 저장한다.

3. 단답형 문제

  • B-Tree 인덱스에서 중요한 탐색 단계
    1. 수직적 탐색 (Root → Branch → Leaf)
    2. 수평적 탐색 (Leaf 내부)
    3. 테이블 Random Access
  • Hash Join이 적합한 SQL 쿼리 유형
    • 대용량 테이블을 조인하거나, OLAP 시스템에서 사용.

4. 다지선다형 문제

  • 정답: 2. 자주 사용하는 컬럼에 특정 함수를 적용하여 검색 속도를 높이는 경우.

5. 정렬 문제

  • 올바른 순서:
    Parsing → Syntax Check → Semantic Check → Optimization → Execution

6. 용어 설명 문제

  • 카디널리티(Cardinality)
    테이블 내에서 서로 다른 값의 개수를 의미하며, 높은 카디널리티는 인덱스 사용에 적합하다.

7. 코드 분석 문제

  • 개선안:
sql
코드 복사
SELECT * FROM orders WHERE order_date LIKE '2023%';
  • 이유: SUBSTR(order_date, 1, 4)는 컬럼 가공으로 인해 인덱스를 사용할 수 없으므로 LIKE를 사용해 인덱스 활용 가능하도록 수정.

8. 비교 문제

  • Nested Loop Join과 Hash Join의 차이점
    1. Nested Loop Join은 작은 데이터셋과 OLTP 쿼리에 적합, Hash Join은 대용량 데이터와 OLAP 쿼리에 적합하다.
    2. Nested Loop Join은 인덱스를 기반으로 동작하며, Hash Join은 메모리에 테이블을 로드하여 동작한다.

9. 예/아니오 문제

  • (예) Index Organized Table(IOT)은 모든 데이터가 인덱스에 저장되며, 별도의 데이터 테이블이 필요 없다.

10. 사례 문제

제안된 인덱스 설계:

  • 결합 인덱스(Index Combination): birthyear + name + mobile
    • 이유:
      • 자주 검색되는 조건(birthyear)과 정렬이 필요한 조건(name)을 선행 컬럼으로 구성.
      • 효율적인 인덱스 탐색을 위해 자주 사용하는 조건을 우선 설정.

 

728x90
728x90

댓글