SORT MERGE JOIN
정렬 후 병합 방식으로 데이터를 JOIN한다
양쪽 데이터를 정렬한 뒤 비교한다.
Card
emy
← 탐색으로 돌아가기
SQLD에서는 인덱스, 실행 순서, 성능 관련 문제가 꾸준히 출제된다. 이 단계에서는 인덱스 특징, Full Scan과 Index Scan 차이, 옵티마이저 개념 등을 쉽고 실전적으로 이해한다. JOIN 수행 방식과 실행 계획 해석 기초도 함께 익히며, 단순 SQL 작성이 아니라 “효율적인 SQL” 관점까지 확장한다.
무료 체험 퀴즈
SORT MERGE JOIN
정렬 후 병합 방식으로 데이터를 JOIN한다
양쪽 데이터를 정렬한 뒤 비교한다.
인덱스
데이터 조회 속도를 높이기 위한 별도의 검색 구조다
책의 목차처럼 원하는 데이터를 빠르게 찾기 위해 사용한다.
풀 테이블 스캔
테이블 전체 데이터를 처음부터 끝까지 읽는 방식이다
조건에 맞는 데이터를 찾기 위해 모든 행을 검사한다.
인덱스 스캔
인덱스를 이용해 필요한 데이터만 빠르게 조회하는 방식이다
조건 컬럼에 인덱스가 있으면 성능이 향상될 수 있다.
옵티마이저
가장 효율적인 실행 계획을 선택하는 데이터베이스 내부 기능이다
SQL 실행 방법을 자동으로 결정한다.
아래 문항들은 이 학습지에 수록된 카드입니다. 로그인하면 이 학습지를 내 계정으로 복사해 카드를 한 장씩 넘기며 반복 학습할 수 있고, 숙달한 카드는 완료 표시하여 다음 세션에서 제외할 수 있습니다.
SORT MERGE JOIN
인덱스
풀 테이블 스캔
인덱스 스캔
옵티마이저
실행 계획
선행 컬럼
복합 인덱스
단일 인덱스
고유 인덱스
비고유 인덱스
클러스터형 인덱스
비클러스터형 인덱스
인덱스 탐색
인덱스 범위 스캔
인덱스 유니크 스캔
인덱스 풀 스캔
인덱스 스킵 스캔
인덱스 정렬 효과
인덱스 생성
인덱스 삭제
기본키 인덱스
외래키 인덱스
선택도
카디널리티
히스토그램
통계 정보
비용 기반 옵티마이저
규칙 기반 옵티마이저
드라이빙 테이블
드리븐 테이블
중첩 루프 JOIN
정렬 병합 JOIN
해시 JOIN
NL JOIN
HASH JOIN
조인 순서
조인 조건
카테시안 곱
SELECT * FROM employees e JOIN departments d ON e.department_id = d.department_id
SELECT * FROM employees WHERE employee_id = 100
SELECT * FROM employees WHERE first_name LIKE 'K%'
SELECT * FROM employees WHERE first_name LIKE '%K'
SELECT * FROM employees WHERE salary > 5000
SELECT * FROM employees ORDER BY employee_id
SELECT * FROM employees WHERE department_id IN (10,20,30)
SELECT COUNT(*) FROM employees
SELECT department_id, COUNT(*) FROM employees GROUP BY department_id
SELECT * FROM employees e JOIN departments d ON e.department_id = d.department_id WHERE d.location_id = 100
SELECT * FROM orders WHERE order_date BETWEEN TO_DATE('20250101','YYYYMMDD') AND TO_DATE('20251231','YYYYMMDD')
SELECT * FROM employees WHERE department_id = 10 AND salary > 5000
SELECT * FROM employees WHERE UPPER(first_name) = 'KIM'
SELECT * FROM employees WHERE hiredate = TO_DATE('20250515','YYYYMMDD')
SELECT * FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id
SELECT * FROM employees WHERE ROWNUM <= 10
SELECT * FROM employees ORDER BY salary DESC
SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 200
SELECT DISTINCT department_id FROM employees
SELECT employee_id, department_id FROM employees WHERE department_id = 10
TABLE ACCESS FULL
INDEX RANGE SCAN
INDEX UNIQUE SCAN
TABLE ACCESS BY INDEX ROWID
SORT ORDER BY
HASH GROUP BY
SELECT * FROM employees WHERE department_id = 10 ORDER BY salary DESC
SELECT * FROM employees WHERE NVL(commission_pct,0) > 0
SELECT * FROM employees WHERE department_id + 1 = 11
SELECT * FROM employees WHERE TO_CHAR(hiredate,'YYYY') = '2025'
SELECT * FROM employees WHERE hiredate >= TO_DATE('20250101','YYYYMMDD') AND hiredate < TO_DATE('20260101','YYYYMMDD')
SELECT /*+ INDEX(employees idx_emp_dept) */ * FROM employees WHERE department_id = 10
SELECT /*+ FULL(employees) */ * FROM employees
SELECT /*+ USE_HASH(d) */ * FROM employees e JOIN departments d ON e.department_id = d.department_id
SELECT /*+ USE_NL(d) */ * FROM employees e JOIN departments d ON e.department_id = d.department_id
SELECT /*+ LEADING(e d) */ * FROM employees e JOIN departments d ON e.department_id = d.department_id
SELECT * FROM employees WHERE EXISTS (SELECT 1 FROM departments d WHERE e.department_id = d.department_id)
SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments)
SELECT * FROM employees WHERE NOT EXISTS (SELECT 1 FROM departments d WHERE e.department_id = d.department_id)
SELECT * FROM employees WHERE department_id NOT IN (SELECT department_id FROM departments)
SELECT employee_id, salary FROM employees WHERE salary = (SELECT MAX(salary) FROM employees)
SELECT department_id, AVG(salary) FROM employees GROUP BY department_id HAVING AVG(salary) > 5000
SELECT * FROM employees e JOIN departments d ON e.department_id = d.department_id WHERE e.salary > 5000
SELECT * FROM employees WHERE employee_id = 100 FOR UPDATE
COMMIT
ROLLBACK
SAVEPOINT sp1
ROLLBACK TO sp1
트랜잭션
원자성
일관성
격리성
지속성