본문 바로가기

DataBase

데이터사전 정보조회 ◈ DICTIONARY(DICT) 뷰 - 데이터 사전 및 동적 성능 뷰에 대한 정보를 알고 싶으면 DICTIONARY 뷰나 DICT_COLUMNS 뷰를 조회하면 됩니다. - 조회 할 수 있는 모든 데이터사전의 테이블이름과 설명을 조회 할 수 있습니다. 물론 설명은 영문으로 되어 있습니다. - 동의어인 DICT를 이용해서도 똑같은 정보를 조회 할 수 있습니다. SQL> SELECT * FROM DICTIONARY WHERE table_name LIKE '%INDEX%'; SQL> SELECT * FROM DICT WHERE table_name LIKE '%INDEX%'; ◈ DICT_COLUMNS 뷰 - 뷰를 질의하면 해당 데이터사전의 컬럼에대한 정보를 조회 할 수 있습니다. SQL> SELECT * FR.. 더보기
Merge 사용하기 - 문법 MERGE INTO table_name alias USING (table|view|subquery) alias ON (join condition) WHEN MATCHED THEN UPDATE SET col1 = val1[, col2 = val2…] WHEN NOT MATCHED THEN INSERT (컬럼리스트) VALUES (값들....); MERGE는 UPDATE와 INSERT를 결합한 문장으로 각각의 쓰임새는 다음과 같다. INTO clause : data가 update 되거나 insert될 table 이름 USING clause : 대상 table의 data와 비교한 후 update 또는 insert할 때 사용할 data의 source. ON clause : update나 insert를 .. 더보기
실행계획 해석하기(1) 실행 계획 해석하기(1) 실행계획을 예를 들어 하나씩 해석해 보도록 하죠^^ 이전의 강좌에도 있지만 실행 계획은 일반적으로 아래와 같은 기준으로 해석 됩니다. - 실행계획의 가장 안쪽으로 들여 쓰기 된 것이 먼저 수행 - 실행 계획의 각 문장은 들여쓰기간 한 단계 덜된 부모 문장에 종속 - 동일하게 들여 쓰기 된 문장이 여러 개 있는 경우 가장 위 문장이 우선 실행 - 인덱스를 경유하여 테이블을 Access하는 두 실행 계획은 하나로 취급(테이블 Lookup에 사용되는 Index Scan을 의미) 아래의 예를 보도록 할까요? SQL> SELECT /*+ FULL(D) */ ENAME, SAL, JOB FROM DEPT D WHERE DEPTNO = 20 UNION ALL SELECT /*+ INDEX(E.. 더보기
실행계획 해석하기(Nested Loops Join) 실행계획 해석하기(Nested Loops Join) 실행 계획을 보면 Nested Loop라는 것이 보이는데 그 바로 밑에 나온 문장이 드라이빙 테이블(OUTER TABLE)이며 그 아래 문장이 비드라이빙 테이블(INNER TABLE) 입니다. 다음의 예를 보도록 하죠… SQL> SELECT E.EMPNO, E.ENAME, D.DNAME, D.LOC FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO ORDER BY EMPNO; 9i) Execution Plan ------------------------------------------------------ SELECT STATEMENT Optimizer=CHOOSE SORT (ORDER BY) TABLE ACCESS (BY.. 더보기
실행계획 SQL 연산(AND-EQUAL) 실행계획 SQL 연산(AND-EQUAL) 이 연산은 로우 연산(ROW OPERATION)이며 인덱스에 의해 반환되는 값들(ROWID)을 병합해서 공통적인 값을 반환하는 연산 입니다. 먼저 예를 보도록 하죠 SQL> SELECT * FROM EM WHERE JOB = ‘SALESMAN’ AND DEPTNO = 10; Execution Plan ------------------------------------------------------------ 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS (BY INDEX ROWID) OF ‘EMP’ 2 1 AND-EQUAL 3 2 INDEX (RANGE SCAN) OF ‘idx_emp_job’ (NON-UNIQUE).. 더보기
실행계획 SQL 연산(CONCATENATION) 실행계획 SQL 연산(CONCATENATION) 반환된 로우를 합산하는 연산 입니다. 아래의 예를 보죠… SQL>SELECT * FROM EMP WHERE JOB=’SALESMAN’ AND DEPTNO IN (20, 40); Execution Plan ------------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 CONCATENATION 2 1 TABLE ACCESS (BY INDEX ROWID) OF ‘EMP’ 3 2 AND-EQUAL 4 3 INDEX (RANGE SCAN) OF ‘idx_emp_deptno’ (NON-UNIQUE) 5 3 INDEX (RANGE SCAN) OF ‘i.. 더보기
실행계획 SQL 연산(COUNT) 실행계획 SQL 연산(COUNT) COUNT 연산은 PSEUDO COLUMNS(의사 컬럼)이 WHERE절이 아닌 SELECT 문장에 나타날 때 실행계획에 나타나는 SQL 연산 입니다. SQL> SELECT ROWNUM, EMPNO, ENAME, SAL FROM EMP; Execution Plan --------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 COUNT 2 1 TABLE ACCESS (FULL) OF ‘EMP’ 더보기
실행계획 SQL 연산(COUNT STOPKEY) 실행계획 SQL 연산(COUNT STOPKEY) COUNT STOPKEY연산은 PSEUDO COLUMNS(의사 컬럼)이 WHERE절에 나타날 때 실행계획에 나타나는 SQL 연산 입니다. SQL> SELECT EMPNO, ENAME, SAL FROM EMP WHERE ROWNUM < 10; Execution Plan --------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 COUNT(STOPKEY) 2 1 TABLE ACCESS (FULL) OF ‘EMP’ 더보기
실행계획 SQL 연산(FILTER) 실행계획 SQL 연산(FILTER) FILTER 연산은 데이터 추출 시 필터링이 일어나고 있음을 알려주는 SQL ROW 연산인데 WHERE 조건 절에서 인덱스를 사용하지 못할 때 발생하는 것입니다. NESTED LOOP 방식으로 해석할 수 있습니다. 아래의 예는 EMP TABLE에서 부서의 최소 급여를 받는 사람들을 추출하는 것입니다. SQL>SELECT ENAME, SAL, JOB FROM EMP A WHERE SAL = (SELECT MIN(SAL) FROM EMP B WHERE B.DEPTNO = A.DEPTNO); Execution Plan --------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE .. 더보기
실행계획 SQL 연산(HASH JOIN) 실행계획 SQL 연산(HASH JOIN) Hash Join은 테이블의 조인 시 특정 테이블 하나(크기가 작은 테이블)를 메모리로 로드 후 Hash 기법을 이용하여 조건에 맞는 데이터를 추출하는 로우(ROW) 연산 또는 집합(SET) 연산 입니다. 일반적으로 Hash Join이 Merge Join 보다 성능이 우수하므로 힌트(USE_HASH)를 이용하여 인위적으로 해시 조인이 일어나도록 하는 것이 유리 합니다. SQL문 사용시 인위적으로 Hash Join이 일어나게 하기 위해서는 USE_HASH 라는 힌트를 사용하면 되는데 힌트를 사용하지 않더라도 Join시 두 테이블 중 한 테이블이 상당히 작아 메모리에 로드 될만한 공간이 있다면 Hsah Join이 일어나는 실행 계획을 만들어 낼 수 있습니다. SQL>.. 더보기