본문 바로가기

SQL

[Tuning]결합인덱스 문제 관련 조인 시 사용된 결합인덱스의 문제 ▶ Optimizer_mode = Rule Based Optimizer ▶ 인덱스 정보 EC_COURSE_CD : EC_COURSE_CD_PK : DIM_COURSE_KEY EC_USER_CNT : EC_USER_CNT_PK : DIM_TIME_KEY + DIM_COURSE_KEY + DIM_GEN_KEY ▶ Before Tuning (Original Source) SELECT A.DIM_COURSE_NAME,B.DIM_TIME_KEY,SUM(B.USER_CNT) FROM EC_COURSE_CD A, EC_USER_CNT B WHERE A.DIM_COURSE_KEY = B.DIM_COURSE_KEY AND A.DIM_BIG_KEY = '02' AND B.DIM_TIME_.. 더보기
[Tuning] Nested Loop Join (튜닝포인트) 1. 조인 순서의 최적화 2. 연결고리(조인조건)에 대한 인덱스 생성 및 사용 3. 인덱스를 잘 활용해야 한다. -- Suppressing 의 적재적소 사용 -- 인덱스 매칭율을 고려한 인덱스 확인 -- 연결고리로 읽는 것을 확인 * JOIN 순서 제어를 위한 방법 (4가지) 1) 힌트 (*+ ORDERED *.) 2) Supprssing 3) 뷰 활용 4) FROM 절의 테이블 순서 변경 (단, RBO일 경우만 일부 가능하다.) 더보기
[실행계획] Exercise_04 HASH JOIN 다르게 동시에 수행되는 특성과 스캔 방식이 아니라 연산에 의한 데이터 연결이라는 차이에 의해서 발생하는 것입니다. 적은 범위의 데이터라면 연결 고리와 선행 조건의 선택만 효율적으로 이루어진다면 NESTED LOOP JOIN이 유리하지만 반대의 경우나 데이터 양이 상당히 많은 경우 정렬 영역 사용에 문제가 있는 SORT MERGE JOIN 보다 HASH JOIN이 유리합니다. 일반적인 경우 OPTIMIZER 모두가 CHOOSE일 경우, NESTED LOOP JOIN인 실행계획의 가격이 불리할 때는 거의 100% HASH JOIND이 나오게 됩니다. HASH JOIN 이 관계형 데이터베이스에서 비용이 가장 많은 JOIN 인 반면 정확히 적재 적소에 사용한다면 다른 어떤 JOIN 보다 성능이.. 더보기
ROLL UP 출처 : 오라클클럽 (http://www.oracleclub.com/lecture/1845) 간단 예제 -- 먼저 GROUP BY를 사용해서 직업별로 급여 합계를 구하는 예제이다. SQL> SELECT job, SUM(sal) FROM emp GROUP BY job; JOB SUM(SAL) ---------- ---------- ANALYST 600 CLERK 3200 MANAGER 33925 PRESIDENT 5000 SALESMAN 4000 -- ROLLUP을 사용해서 직업별로 급여 합계와 총계를 구하는 예제이다. SQL> SELECT job, SUM(sal) FROM emp GROUP BY ROLLUP(job); JOB SUM(SAL ---------- ---------- ANALYST 6000 C.. 더보기
OUTER JOIN Outer Join - Join 조건을 만족하지 않는 경우에도 다른 행들을 보기 위해 사용 - 한쪽 테이블에는 해당하는 데이터가 존재하는데 다른 쪽 테이블은 데이터가 존재하지 않을 경우 모두 데이터를 출력하게 하는 조인 - 조인시킬 값이 없는 즉 null 행으로 결합하는 (데이터가 없는 table)쪽에 (+) 연산자를 사용 - (+)를 사용하는 위치는 Join할 데이터가 부족한 쪽에 위치시킴 - Outer Join 조건이 걸려있는 테이블에는 다른 조건절이 들어와도 똑같이 Outer 조인 연산자를 (+) 해주어야함 - left out join : 왼쪽 테이블이 기준 왼쪽 테이블의 자료는 모두 출럭되고 오른쪽 테이블의 자료는 연결되는 것들만 출력 왼쪽 테이블의 컬럼명 = 오른쪽 테이블의 컬럼명(+) - ri.. 더보기
[SQL 고수되기] 열한번째 이야기 출처 : 네이버지식인 노하우 http://kin.naver.com/knowhow/detail.nhn?d1id=8&dirId=8&docId=553699&qb=U1FMIOqzoOyImOuQmOq4sCDsl7TtlZzrsojsp7gg7J207JW86riw&enc=utf8§ion=kin&rank=1&search_sort=0&spq=0&pid=go1ZH35Y7vwsstEJfvZssc--411835&sid=TozeLPJwjE4AABooIow 안녕하세요. 오랜만에 이야기를 시작합니다. 오늘 할 이야기는 지난번 이야기에서 잠깐 이야기 나누웠던 통계현황 조회에 대해 구체적으로 이야기해볼까합니다. 이거 기억하시죠? ┌────┬───┬───┬───┬───┬───┬───┬───┬────┐ │ 사번 │ 일 │ 월 │ 화.. 더보기
[SQL 고수되기] 열번째 이야기 출처 : 네이버지식인 노하우 http://kin.naver.com/knowhow/detail.nhn?d1id=8&dirId=8&docId=553302&qb=U1FM6rOg7IiY65CY6riwIC0g7Je067KI7Ke4IOydtOyVvOq4sA==&enc=utf8§ion=kin&rank=1&search_sort=0&spq=0 이번 이야기에선 앞으로 많이 활용되어질 아르바이트생정보에 대해 만들어볼까합니다. 종종 발생하는 Data Migration 방식을 보여드리고저 하는데 이땐 우편번호 정보가 필요합니다. 전부 다 가지고 계신게 아니기에 그냥 간단하게 주조를 고정시키고 만드는 방법과 랜덤하게 주소를 만드는 방법 두가지로 만들겠습니다. 참고로 우편정보 필요하신분들은 하단 의견란에 글남기시면 메일로 .. 더보기
union vs. union all [ UNION ] UNION 구문은 첫번째 쿼리의 모든 행을 두번째 쿼리의 모든 행과 더하고, 중복된 행을 제거한 후, 결과를 리턴한다. 다음 예를 보면 첫번째 쿼리에서 EMPLOYEES_ID와 LAST_NAME에서 LAST_NAME 열이 A나 B로 시작하는 직원 레코드를 얻고, 두번째 쿼리에서는 EMPLOYEES_ID와 LAST_NAME 열에서 LAST_NAME이 B나 C로 시작하는 직원 레코드를 얻었다. 쉽게 알 수 있겠지만 B로 시작되는 LAST_NAME 열을 가지는 직원 레코드는 첫번째와 두번째 쿼리 모두에서 선택되며 , 중복되는 행들은 결과셋에서 제외된다. select employee_id, last_name from employees where last_name like 'A%' or last.. 더보기