목록분류 전체보기 (912)
정미나닷컴
☑ 쿼리 변환이란?뷰 MergingSELECT * FROM (SELECT * FROM EMP WHERE JOB = 'SALESMAN') A,(SELECT * FROM DEPT WHERE LOC = 'CHICAGO') BWHERE A.DEPTNO = B.DEPTNO;▼SELECT * FROM EMP A, DEPT BWHERE A.DEPTNO = B.DEPTNO AND A.JOB = 'SALESMAN' AND B.LOC = 'CHICAGO';- 뷰 Merging을 통해 옵티마이저는 더 다양한 access 경로를 조사 대상으로 삼게 됨 단순 뷰(Simple View) Merging- 단순 뷰 : 조건절과 JOIN문만을 포함, no_merge 힌트를 사용하지 않는 한 언제든 Merging 발생-- 조건절 하나만..
쿼리 변환 (Query Transformation)- 쿼리 옵티마이저가 SQL을 분석해 의미적으로 동일(같은 결과를 리턴)하면서도 더 나은 성능이 기대되는 형태로 재작성① 휴리스틱 쿼리 변환결과만 보장된다면 무조건 쿼리 변환 수행 (일종의 Rule-based 최적화 기법)② 비용기반 쿼리 변환변환된 쿼리의 비용이 더 낮을 때만 쿼리 변환 수행 서브쿼리의 분류- 인라인 뷰 (Inline View) : from 절에 나타나는 서브쿼리- 중첩된 서브쿼리 (Nested Subquery) : 결과집합을 한정하기 위해 where 절에 사용된 서브쿼리 * 서브쿼리가 메인쿼리에 있는 컬럼을 참조하는 형태를 '상관관계 있는 서브쿼리'라고 함- 스칼라 서브쿼리 (Scalar Subquery) : 한 레코드당 정확히 하나의..
SQL 처리 절차 - CBO (Cost-Based Optimizer) - SQL Parsing① Syntax check (문법적 오류)② Semantic check (의미상 오류)③ 권한 검사④ SQL과 실행계획이 Library Cache에 존재하는지 check⑤ 존재하면 Execution 단계로 점프 (Soft Parsing), 존재하지 않으면 Optimization (Hard Parsing) ˚Soft Parsing : SQL과 실행계획을 Library Cache에서 찾아 바로 실행˚Hard Parsing : SQL과 실행계획이 캐싱되어 있지 않아 최적화 한 후 실행 ▼ Library Cache 저장 구조* Hash Bucket = Hash Function(SQL Text) Library Cache ..
상호배타적 관계의 JOIN- 상호배타적 관계 : 어떤 엔티티가 두 개 이상의 다른 엔티티의 합집합과 관계를 갖는 것- 상품권결제 테이블 모델링 방법 ① 온라인권번호, 실권번호 두 컬럼을 따로 두고, 레코드별로 둘 중 하나의 컬럼에만 값을 입력 → 외래키 분리SELECT /*+ ordered use_nl(b) use_no(c) use_nl(d) */ A.주문번호, A.결제일자, A.결제금액,NVL(B.온라인권번호, C.실권번호) 상품권번호,NVL(B.발행일시, D.발행일시) 발행일시 FROM 상품권결제 ALEFT OUTER JOIN 온라인권 BON B.온라인권번호 = A.온라인권번호LEFT OUTER JOIN 실권 CON C.실권번호 = A.실권번호LEFT OUTER JOIN 실권발행 DON D.발행번호 ..
그 날, 약간은 서늘한 공기를 머금었던 안개 자욱했던 새벽녘의 교정을 기억한다. 홀로 아무 이유없이 그 곳을 거닐었던 조금은 쓸쓸했던 어린 날의 나를 기억한다. 그 곳에서만 나던 특유의 풀 냄새를 기억한다. 그 무렵에만 느낄 수 있었던 몽환적인 느낌을 기억한다. 안개는 흘러 흘러 어딘가로 떠나갔고 시간은 흘러 흘러 나를 시공간의 어디쯤으로 데려왔다. 손을 뻗으면 당장이라도 만져질 것 같은 희뿌옇던 풍경을 기억한다. 무성 영화처럼 절대적으로 고요했던 그 날의 장면을 기억한다.
징검다리 테이블 JOIN을 이용한 튜닝-- 고객의 할인혜택 조회SELECT /*+ ordered use_nl(S R) */ C.고객번호, S.서비스번호, S.서비스구분코드, S.서비스상태코드, S.서비스상태변경코드, R.할인시작일자, R.할인종료일자 FROM 고객 C, 서비스 S, 서비스요금할인 R WHERE C.주민법인등록번호 = :ctz_biz_num AND S.명의고객번호 = C.고객번호 AND R.서비스번호 = S.서비스번호 AND R.서비스상품그룹 = '3001' AND R.할인기간코드 = '15' ORDER BY R.할인종료일자 DESC, S.서비스번호; -- 인덱스 구성 고객_N1 : 주민법인등록번호서비스_N2 : 명의고객번호 + 서비스번호서비스요금할인_PK : 서비스번호 + 서비스상품그룹서..
선분이력 JOIN- 변경일자만으로 관리되는 점이력에 반해 선분이력은 시작일자, 종료일자로 관리 과거/현재/미래의 임의 시점 조회-- 위 세 테이블을 JOIN하여 2004년 9월 1일 시점의 데이터를 조회SELECT C.고객번호, C.고객명, C1.고객등급, C2.전화번호 FROM 고객 C, 고객등급변경이력 C1, 전화번호변경이력 C2 WHERE C.고객번호 = 123 AND C1.고객번호 = C.고객번호 AND C2.고객번호 = C.고객번호 AND :dt BETWEEN C1.시작일자 AND C1.종료일자 AND :dt BETWEEN C2.시작일자 AND C2.종료일자;-- :dt = '20040901' 현재 시점 조회 - 미래 시점 데이터를 미리 입력하는 예약 기능이 없다면 현재 시점 조회는 '=' 조건..