목록전체 글 (89)
DBDBDEEP
플랜 정보와 플랜의 수행 정보들에 대해 사용자가 원하는 항목을 선택해서 다양한 포맷으로 출력할 수 있는 기능을 제공한다. V$SQL_PLAN, V$SQL_PLAN_STATISTICS 뷰를 통해서 구하기 때문에, GATHER_SQL_PLAN_STAT 파라미터가 켜져 있어야 수행 정보를 구할 수 있음.DBMS_XPLAN.DISPLAY_CURSORSQL> select * from table (dbms_xplan.display_cursor(in_sql_id, in_child_no, format); 파라미터설명in_sql_id조회하려는 플랜의 SQL_ID 값이다. 입력을 생략한 경우에는 해당 세션의 마지막 수행 쿼리의 SQL_ID 값을 사용하게 된다.in_child_no조회하려는 플랜의 CHILD_NUMBER 값..
파티션을 사용하면 검색 조건을 만족하는 파티션만 골라 읽을 수 있다. 따라서 '이력성' 데이터를 Full Scan 방식으로 조회할 때 성능을 크게 향상시킨다. 또한 데이터가 저장된 파티션만 백업하고 삭제하는 등 데이터 관리 작업을 효율적이고 빠르게 수행할 수 있는 장점이 있다. Partition Prunning SQL 하드파싱이나 실행 시점에 조건절을 분석해서 읽지 않아도 되는 파티션 세그먼트를 액세스 대상에서 제외하는 기능 Execution Plan----------------------------------------------------------------------------------------------------------- 1 PARTITION RANGE (SUBSET PART) (..
인덱스는 항상 키 컬럼 순으로 정렬된 상태를 유지한다.따라서 SQL에 Order by 또는 Group by 절이 있어도 소트 연산 생략이 가능하다. * 여기에 Top N 쿼리 특성을 결합하여 온라인 트랜잭션 처리 시스템에서 대량 데이터를 조회할 때 빠른 응답속도를 낼 수 있다.* 또는 특정 조건을 만족하는 최소값 또는 최대값을 찾을 수 있어 이력 데이터 조회할 때 매우 유용하다select 거래일시, 체결건수, 체결수량, 거래대금from 종목거래where 종목코드 = ' KR123456 'order by 거래일시 해당 쿼리는 [종목코드 + 거래일시] 순으로 구성하지 않으면 소트연산 생략 불가능 여기서 SORT ORDER BY는 인덱스를 위와 같이 구성하지 않을 시 나타나고구성하게 된다면 SORT ORDE..
Union 과 Union All 둘 다 두개 이상의 Select 결과를 합치는 SQL 연산자인데 중요한 차이가 있다. UNION - 옵티마이저는 상단과 하단 두 집합간 중복을 제거하기 위하여 소트 작업을 수행한다.- 중복 제거 때문에 정렬/해시 수행하기에 느리다. UNION ALL- 중복을 확인하지 않고 단순히 결합하기 때문에 소트작업을 수행하지 않는다.- 중복 제거를 하지 않기 때문에 속도가 빠르다. 따라서 될 수 있으면 Union All을 사용해야한다. CASE 1. 다음 모델에, 다음과 같이 SQL 사용시 Union All 을 사용해도 될까? SELECT 결제번호, 주문번호, 결제금액, 주문일자 ..FROM 결제 WHERE 결제수단코드 ='M' AND 결제일자 = '20180316'UNIONS..
쿼리 두개가 있다고 가정한다. 1. 함수 사용 쿼리 SELECT empno, ename, sal, hitedate, get_dname(e.deptno) AS dnameFROM emp eWHERE sal >= 2000; 2. 함수 미사용 쿼리SELECT empno, ename, sal, hiredate (SELECT d.dname FROM dept d WHERE d.deptno = e.deptno) AS dnameFROM emp eWHERE sal >= 2000; 1번 쿼리는 PL/SQL 컨텍스트 전환 + 함수가 row단위로 반복 실행된다. 2번 쿼리 : 스칼라 서브쿼리 - Outer 조인문처럼 NL 조인 방식으로 수행된다.- 메인 쿼리 레코드마다 정확히 하나의 값만 반환한다. 더 쉽게 ..
SELECT e.empno, e.ename, (SELECT AVG(sal) FROM emp_test s WHERE s.deptno = e.deptno) AS avg_sal_in_deptFROM emp_test eWHERE e.sal > 2000; 메인 쿼리 : FROM emp_test e WHERE e.sal > 2000서브 쿼리 : SELECT AVG(sal) FROM emp_test s WHERE s.deptno = e.deptno 서브쿼리는 "메인 쿼리의 row마다 한 번씩" 수행 된다. 메인 쿼리가 emp_test 테이블을 읽으면서 e라는 alias로 각 row(직원)를 하나씩 처리할 때, 서브쿼리 안에서 e.deptno 을 사용한다.즉, 서브쿼리는 "현재 보고..
SubQuery : 하나의 SQL문 안에 괄호로 묶은 별도의 쿼리블록, 쿼리에 내장된 또 다른 쿼리 스칼라 서브쿼리 : 한 레코드당 정확히 하나의 값을 반환하는 서브쿼리. 주로 select-list 에서 사용하지만 몇 가지 예외사항을 제외하면 컬럼이 올 수 있는 대부분 위치에 사용할 수 있음 Inline View (인라인 뷰) : FROM 절에 사용한 서브 쿼리 중첩된 서브쿼리 (Nested Subquery) : 결과집합을 한정하기 위해 Where 절에 사용하는 서브쿼리. 서브쿼리가 메인쿼리 컬럼을 참조하는 형태를 '상관관계 있는 서브쿼리' 라고 부른다 종류설명스칼라 서브쿼리(Scalar Suquery)SELECT 절에 위치하며 한 레코드당 정확히 하나의 값을 반환하는 서브쿼리 (단일행, 단일칼럼을 ..
HASH 조인 기본 매커니즘 Build 단계 - 작은 쪽 테이블(Build Input)을 읽어 해시 테이블(해시 맵)을 생성한다. Probe 단계- 큰 쪽 테이블(Probe Input)을 읽어 해시 테이블을 탐색하면서 조인한다. ① =================================================== Build 단계 - 사원 데이터를 읽어 해시 테이블을 생성한다. 이 때 조인컬럼인 사원번호를 해시 테이블 키 값으로 사용한다. '사원 번호'를 '해시함수'에 입력해서 '반환된 값' 으로 해시 체인을 찾고 그 해시 체인에 데이터를 연결한다.- 해시 테이블은 PGA 영역에 할당된 Hash Area에 저장한다. 너무 크면 역시나 Temp Tablespace에 저장한다. ② ==..