목록전체 (348)
파게로그
optimizer의 실행 방법 SQL 개발자가 SQL을 실행하면, parsing을 통해 SQL의 문법 검사 및 구문 분석을 수행 optimizer가 규칙 기반 혹은 비용 기반으로 SQL execution plan 수립 optimizer는 기본적으로 통계 정보를 활용해서 최적의 실행 계획을 수립하는 비용 기반 optimizer를 사용 최종적으로 SQL을 실행하고 실행이 완료되면 데이터를 인출(fetch) optimizer engine query transformer: SQL문을 효율적으로 실행하기 위해서 optimizer가 변환함. SQL이 변환되어도 그 결과는 동 estimator: 통계 정보를 사용해서 SQL 실행 비용을 계산. 총 비용은 최적의 실행 계획을 수립하기 위함임 plan generator:..
optimizer SQL 개발자가 SQL을 실행할 때, optimizer는 실행 계획(execution plan)을 수립하고 SQL을 실행함 DBMS의 소프트웨어 대개 프로그래밍 언어가 절차형 언어로서 데이터 액세스 방법을 개발자가 직접 작성하는 반면, SQL은 선언형 언어로서 데이터 액세스 방법은 작성되지 않고 optimizer가 결정함 optimizer의 특징 data dictionary에 있는 오브젝트 통계, 시스템 통계 등의 정보를 사용해서 예상되는 비용 산정 여러 개의 실행 계획 중에서 최저 비용을 가지고 있는 계획을 선택 optimizer가 실행 계획을 비효율적으로 수립하면, SQL 개발자는 SQL을 개선해야 함 optimizer에게 HINT를 통해 실행 계획 변경을 요청할 수 있음 optim..
partition 기능 대용량의 테이블을 여러 개의 데이터 파일에 분리해서 저장 데이터가 물리적으로 분리된 데이터 파일에 저장되면 CRUD 성능이 향상됨 파티션 별로 백업, 복구, 파티션 전용 인덱스 생성 등 독립적으로 관리될 수 있음. Oracle 데이터베이스의 논리적 관리 단위인 table space 간의 이동이 가능 partition의 종류 range partition - 테이블의 칼럼 중 값의 범위를 기준으로 하여 여러 개의 파티션으로 데이터를 나누어 저장하는 것 list partition - 테이블의 특정 칼럼의 값을 기준으로 하여 여러 개의 파티션으로 데이터를 나누어 저장하는 것 hash partition - DBMS가 내부적으로 해시 함수를 사용하여 여러 개의 파티션으로 데이터를 나누어 저장..
window function SELECT WINDOW_FUNCTION(ARGUMENTS) OVER ( -- GROUP BY 같은 역할. 전체 집합을 기준에 의해 소그룹으로 나눔 -- ORDER BY 역할. 어떤 항목에 대해서 정렬 -- WHERE 역할. 행 기준의 범위를 정함. ROWS: 물리적 결과의 행 수, RANGE: 논리적인 값에 의한 범위 ) FROM 테이블명; window function의 구조 SELECT empno, ename, sal, SUM(sal) OVER ( ORDER BY sal ROWS BETWEEN UNBOUNDED PRECDING AND CURRENT ROW ) totsal FROM emp; -- 행 별로 누적 합계를 구함 PARTITION BY절 - GROUP BY 같은 역..
ROLLUP SELECT DECODE(deptno, NULL, '전체합계', deptno), SUM(sal) FROM emp GROUP BY ROLLUP(deptno); SELECT deptno, job, SUM(sal) FROM emp GROUP BY ROLLUP(deptno, job); -- 부서별 합계 - 직업별 합계 - 전체합계. 순서에 따라서 결과가 달라짐 GROUP BY의 칼럼에 대해서 subtotal을 만듦 GROUP BY구에 칼럼이 2개 이상 오면, 순서에 따라서 결과가 달라짐 GROUPING SELECT deptno, GROUPING(deptno), job, GROUPING(job), SUM(sal) FROM emp GROUP BY ROLLUP(deptno, job); SELECT dep..
subquery SELECT문 내에 다시 SELECT문을 사용하는 SQL문 가상의 테이블을 만드는 효과를 얻을 수 있음 inline view: FROM구에 SELECT문 사용 scala subquery: SELECT문에 subquery 사용(한 행과 한 칼럼만 반환) subquery: WHERE구에 SELECT문 사용 단일 행 서브쿼리 단 하나의 행만 반환 비교연산자(=, =) 사용 다중 행 서브쿼리 여러 개의 행을 반환 다중 행 비교연산자(IN, ANY, ALL, EXISTS) 사용 IN(subquery) - main query의 비교 조건이 subquery의 결과 중 하나만 동일하면 참 ALL(subquery) - main query와 subquery의 결과가 모두 동일하면 참 - < ALL: 최솟값..
CONNECT BY SELECT MAX(LEVEL) FROM EMP START WITH MGR IS NULL CONNECT BY PRIOR EMPNO = MGR; 트리 구조로 질의를 수행하는 것 root 노드로부터 하위 노드의 질의를 시행 MAX(LEVEL)을 통해 최대 계층 수(leaf node의 계층값)를 구할 수 있음 START WITH: 시작 조건 CONNECT BY PRIOR: 조인 조건 EMPNO ENAME MGR 1000 '철수' NULL 1001 '영희' 1000 1002 '민수' 1000 1003 '은지' 1001 1004 '나현' 1002 1005 '동원' 1003 1006 '지아' 1003 SELECT LEVEL, LPAD(' ', 4 * (LEVEL-1)) || EMPNO, MGR,..
wisoft.tistory.com/entry/database-sql-join-method JOIN 여러 개의 릴레이션을 사용해서 새로운 릴레이션을 만드는 과정 cartesian product를 바탕으로 생각하면 쉬움 INNER JOIN 공통 컬럼의 값이 같은 것을 추출 EQUI JOIN - 공통 컬럼의 동등 비교 - explicit notation SELECT * FROM EMP INNER JOIN DEPT ON WHERE EMP.deptno = DEPT.deptno; - implicit notation SELECT * FROM EMP, DEPT WHERE EMP.deptno = DEPT.deptno; NATURAL JOIN - EQUI JOIN 결과에서 동일 칼럼의 중복을 제거 - explicit no..