반응형 SQL14 oracle hint 적용 안되는 경우 확인 및 해결 법 뷰 머징과 같은 쿼리변환(Query Transformation)으로 힌트가 적용되지 않는 경우 확인 및 해결 법 SQL 수행 -- 테스트 뷰 생성 CREATE VIEW HR.DP_V AS SELECT DP.* FROM(SELECT * FROM HR.DEPARTMENTS UNION ALL SELECT * FROM HR.DEPARTMENTS_TMP ) DP, EMPLOYEES E, LOCATIONS L WHERE DP.DEPARTMENT_ID = E.DEPARTMENT_ID AND DP.LOCATION_ID = L.LOCATION_ID ; -- SQL SELECT E.* FROM HR.EMPLOYEES E, HR.DP_V D WHERE 1=1 AND E.DEPARTMENT_ID = D.DEPARTMENT_I.. 2023. 7. 7. oracle hint 위치별 적용여부 테스트 DBMS : oracle 19.3 힌트없음 SQL> SELECT * FROM sk.tab1 a, sk.tab2 b WHERE a.object_id = b.object_id AND a.owner = 'SK' ; --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 2705 | 697K| 790 (1)| 00:00:01 | |* 1 | H.. 2023. 7. 4. ORDER BY 컬럼명이 가리키는 컬럼은? ORDER BY 컬럼명이 가리키는 위치는 실제 컬럼명일까? alias 일까? - 먼저 SELECT 절 컬럼명(alias)을 찾아보고 없으면 실제 컬럼을 찾아간다 테이블 데이터 조회 SELECT * FROM sk.t1 ; C1 C2 ---------- ---------- 1 5 2 4 3 3 4 2 5 1 alias 명으로 정렬 alias (c1 -> c2, c2 ->b) 라고 선언 후 order by c2 실행 SELECT c1 c2 , c2 b FROM sk.t1 ORDER BY c2 ; C2 B ---------- ---------- 1 5 2 4 3 3 4 2 5 1 실제 컬럼명 정렬 alias (c1 -> a, c2 ->b) 라고 선언 후 order by c2 실행 SELECT c1 a, c2 b.. 2023. 7. 3. 펑션 위치별 실행 횟 수 - 스칼라서브쿼리와 달리 펑션은 실행 시점의 데이터를 가져와서 타세션에서 데이터 변경시 데이터가 달라질 수 있음 - 펑션 위치별 실행 횟수의 차이를 알아본다 select 절 펑션 : 메인 쿼리의 모든 결과만큼 수행 SELECT owner, object_name, sk.sel_d(object_id) FROM sk.tab10 call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 4862 1.12 1.60 0 6185 0 72914 -.. 2023. 7. 2. INLIST ITERATOR 성능개선(where 절 in 조건) INLIST ITERATOR 오퍼레이션은 인덱스 수직 탐색으로 인해 과도한 블록 I/O를 발생할 수 있다. 조회 범위가 넓지 않다면 RANGE SCAN 후 FILTER 처리로 I/O를 줄일 수 있다. 1. 테스트 테이블 생성 DROP TABLE T1 PURGE; CREATE TABLE T1 AS SELECT ROWNUM AS c1, LPAD ('X', 10, 'X') AS c2 FROM XMLTABLE ('1 to 1000000'); CREATE INDEX T1_IX01 ON t1 (c1, c2); 2. 아래 쿼리는 IN 절로 10개의 행을 조회했다. 실행 계획 2번 Starts에서 t1_x1 인덱스가 10번 액세스된 것을 확인할 수 있다. 이로 인해 14개의 블록 I/O가 발생했다. SELECT * F.. 2023. 6. 29. 스칼라서브쿼리 실행계획 순서 및 실행통계 스칼라 서브쿼리 실행계획 - 스칼라 서브 쿼리는 실행 계획 상단에 별도로 표시된다. - 스칼라 서브 쿼리는 최종 SELECT 목록 순서로 표시되며, 중첩 스칼라 서브 쿼리 안쪽부터 표시된다. 스칼라 서브쿼리의 buffers 와 수행시간 메인쿼리 실행통계에 포함 여부 - 일반적으로 스칼라 서브 쿼리의 수행 시간과 블록 I/O는 메인쿼리 실행 통계에 포함되지 않는다. - 인라인뷰와 같은 뷰머징이 발생하지 않을 경우 전체 실행통계에 포함되어 보인다. 메인쿼리 row 여러 개일 때 스칼라 서브쿼리 실행계획 - 일반상황 시 스칼라서브쿼리 실행통계는 메인쿼리와 별도로 보여짐 - 인라인뷰로 변경 시 메인쿼리 실행계획에 스칼라서브쿼리 시간 및 buffer 포함됨 아래 쿼리는 인라인 뷰(t2)와 메인 쿼리(t3)에 스칼.. 2023. 6. 28. 이전 1 2 3 다음 반응형