본문 바로가기

분류 전체보기194

GROUP BY, DISTINCT, ORDER BY 최적화 방법 총정리 SQL에서 GROUP BY, DISTINCT, ORDER BY는 데이터 집계나 정렬을 위해 자주 사용되는 구문입니다. 하지만 대용량 데이터에서 무심코 사용하면 성능이 급격히 저하될 수 있습니다. 오늘은 각 구문이 어떻게 동작하는지, 그리고 어떻게 최적화할 수 있는지 살펴보겠습니다.GROUP BY 최적화GROUP BY는 동일한 값을 가진 행들을 그룹화하여 집계 연산을 수행합니다. 1) 기본 동작 방식서버는 대상 컬럼을 기준으로 데이터를 정렬(SORT)한 후 그룹핑 처리집계 함수(SUM, COUNT, AVG 등)와 함께 사용SELECT category, COUNT(*) AS cntFROM productsGROUP BY category; 2) 성능 저하 원인정렬(Sort) 작업이 추가적으로 발생데이터가 많을수.. 2025. 8. 12.
서브쿼리와 뷰(View) 최적화 서브쿼리(Subquery)란?서브쿼리는 다른 SQL문의 일부로 포함되어 실행되는 쿼리입니다. 주로 WHERE, FROM, SELECT 절에서 사용됩니다. 예시:SELECT * FROM employees WHERE department_id = ( SELECT department_id FROM departments WHERE department_name = 'Sales'); 튜닝 관점: 서브쿼리의 위치와 작성 방식에 따라 실행 계획이 크게 달라집니다. 서브쿼리 유형별 성능 특성1. 단일 행 서브쿼리 반환값이 1개인 서브쿼리 (=, , 옵티마이저가 실행 순서를 단순화하기 쉽다 튜닝 포인트 PK나 Unique Index가 걸린 컬럼에서 단일 행 서브쿼리는 매우 빠름2. 다중 행 서브쿼리여.. 2025. 8. 11.
SQL 튜닝 관점에서 보는 인덱스(Index) 구조와 성능 인덱스의 역할 — 왜 튜닝에서 중요한가?SQL 튜닝의 80%는 불필요한 Full Table Scan을 줄이고, 인덱스를 효과적으로 활용하는 데서 시작됩니다. 인덱스 구조와 성능 특성을 이해하면, 실행 계획을 읽고 "왜 인덱스를 안 타는지" 바로 원인을 찾을 수 있습니다.인덱스 내부 구조와 동작 방식1 B-Tree 인덱스 (Balanced Tree)대부분의 RDBMS가 사용하는 기본 인덱스 구조검색, 정렬, 범위 조회에 유리구조: 루트 노드 → 브랜치 노드 → 리프 노드리프 노드에는 실제 데이터의 주소(RowID) 저장 튜닝 포인트 인덱스 범위를 최소화하면 블록 I/O를 줄일 수 있음"선행 컬럼" 조건이 실행 계획의 인덱스 활용 여부를 결정2. 클러스터형 vs 비클러스터형 구분 클러스터형 인덱스 비클러.. 2025. 8. 11.
실행 계획(Execution Plan) 분석 실행 계획이란 SQL 문을 실행할 때 데이터베이스가 어떤 경로로 데이터를 읽고 처리할지를 단계별로 나타낸 설계도입니다. SQL 튜닝에서는 실행 계획을 읽는 능력이 성능 개선의 출발점입니다. 실행 계획의 확인 방법DBMS마다 실행 계획을 확인하는 명령어와 툴이 다릅니다.1. OracleEXPLAIN PLAN FOR ... + SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY)SET AUTOTRACE ON (SQL*Plus)SQL Developer의 "Execution Plan" 탭2. MySQLEXPLAIN SELECT ...;EXPLAIN FORMAT=JSON SELECT ...;3. PostgreSQLEXPLAIN SELECT ...;EXPLAIN (ANALYZE, BUFFERS) .. 2025. 8. 10.