본문 바로가기

04번. IT 힌트얻기

Oracle Function ◆ FUNCTION 생성 ◆ 실행 환경에 반드시 하나의 값을 Return 하기 위해 PL/SQL 함수를 사용한다. 함수 선언에서 Datatype이 있는 RETURN 절을 추가하고 PL/SQL 블록에 적어도 한 개 이상의 RETURN 문을 포함한다. PARAMETER에서 사용하는 IN, OUT, IN OUT는 PROCEDURE에서 사용한 것과 동일하게 사용가능하나 대부분 IN을 사용한다. 1. Syntax OR PLACE function name이 존재할 경우 FUNCTION의 내용을 지우고 다시 생성 function_name Function의 이름은 표준 Oracle 명명법에 따른 함수이름 argument 매개변수의 이름 mode 3가지가 있다 IN(입력매개변수), OUT(출력매개변수), IN OUT(입.. 더보기
스레드 만들고 시작하기(thread, runnable) 스레드를 만드는 방법과 그에 우선하여 왜 멀티 스레드가 필요한지 알아보자. 이를 가장 잘 설명할 수 있는 것이 바로 문서작성소프트웨어의 경우 인쇄를 하면서 동시에 문서 수정도 가능하다. 이런 것들은 모두 멀티 스레드로 돌려지기 때문에 가능한 것이다. 자바에서 스레드를 이용하려면, Tread 클래스의 객체를 인스턴스화(instantiate) 해야 하고, 이 때 스레드에서 실행되어야 하는 코드를 작성해 주어야 한다. 두 가지 방식이 있다. (1) Runnable 인터페이스를 구현 자바에서 인터페이스는 클래스 보다 좀 더 추상적인 개념이다. 가령, 로봇에 대한 속성이나 동작 등을 클래스로 정의한다면, 어떻게 동작해야 하는 지 까지 세부 소스 코드를 작성해야 한다. 그러나, 인터페이스의 경우 어떠한 동작을 한다.. 더보기
객체지향 기본 개념 1. 캡슐화 (Encapsulation) 1.1 캡슐화란? ▶ 객체지향에서 캡슐화라는 개념은 클래스 내부에 여러 속성과 여러 오퍼레이션을 함께 묶음을 의미한다. 그리고 캡슐화는 클래스 내부의 속성이나 오퍼레이션을 외부에 노출하지 않고 보호하는 것을 의미한다. 이렇게 캡슐화는 묶는 것과 보호하는 것을 생각할 수 있다. 좀 더 상세하게 생각해 보면, 여러 속성과 여러 오퍼레이션을 함께 묶어 클래스로 취급하는 것과 클래스 내부를 외부에서 접근하지 못하도록 보호하는 것이 바로 캡슐화이다. 즉, 속성과 오퍼레이션을 하나의 클래스로 패킹한 것이 바로 캡슐화라는 개념이다. 외부로 부터 내부를 감싸 숨기는 것을 캡슐화라고 한다. 1.2 캡슐화는 왜 해야 할까? ▶ 캡슐화를 통해 묶고 숨김을 생각해 보았다. 그런데 왜 .. 더보기
[튜닝알아가기] 첫번째 이야기 더보기
[Tuning] perfect_study_04 Part 5. Cartesian Product Cartesian Product는 다음과 같은 조인을 수행할 때 발생한다. ① WHERE절 없는 조인 수행 ② 조인을 위한 조건 없이 조인 수행 Cartesian Product는 "데이터 복제" 라는 개념을 활용하기 위해 사용하게 된다. 그러나 잘못 사용하는 경우에는 오히려 데이터를 부풀리는 원인이 되기 때문에 퍼포먼스를 오히려 나쁘게 할 수도 있다. Part 5 에서는 Cartesian Product를 적용해야 할 대상을 사례별로 다루어 봄으로써, Cartesian Product를 정확하게 사용할 수 있도록 하고자 한다. [사례연구 #12] Cartesian Product의 응용Ⅰ * Cartesian Product를 응용한 대표적인 사례 ☞ ① FROM .. 더보기
[Tuning] perfect_study_03 [사례연구 #08] Sub-query로 Join해결 * Join과 Sub-query를 성능상 비교 대상이 될 수 있다. 기본적으로 테이블에 대한 데이터 처리를 join에서 할 때와 sub-query 에서 할 때를 서로 비교함으로써 상대적으로 적게 데이터를 처리할 수 있도록 하는 방법을 선택할 수 있어야 한다. - Correlated Sub-query와 Nested Sub-query 사용을 통해서 조인에 대한 튜닝을 하고자 함. ① Correlated sub-query의 실행원리 항상 main-query가 먼저 실행되며, 이때 데이터가 추출되는 가운데 sub-query가 반복해서 실행된다. ② Nested sub-query의 실행원리 일반적으로 sub-query가 먼저 실행되며, 그 후에 main-quer.. 더보기
[Tuning] perfect_study_02 ★★ Oracle의 Hint → Optimizer에게 작업방법을 알려줄 수 있는 수단임. 따라서 힌트를 사용하게 되면 대부분 힌트에 의해서 optimizer는 작업을 하게 됨. (SQL 튜닝이 쉬워짐) 한편, 힌트를 갖고 있는 SQL의 실행계획은 고정됨. (힌트의 문제점) ㈜ 사용법 - Hint의 영향력은 hint를 갖고 있는 SQL에 한정됨 - 하나의 SQL은 배타적인 관계에 해당하는 hint가 아니라면 개수에 제한없이 hint를 사용할 수 있음 - Hint는 syntax 에러가 없음 - /* + hint */ 또는 -- + 와 같이 "*" 와 "+" 사이에 또는 "-" 와 "+" 사이에 빈칸이 있어선 안됨 - Hint에 의해서 테이블을 지칭할 때, 테이블에 대해서 alias를 사용 중이라면 hint도.. 더보기
[Tuning] 분석함수의 활용 (셀프조인의 해결) 분석함수의 활용 (셀프조인의 해결) 사용자가 요구하는 리포트의 특성 또는 테이블의 설계적인 특성 으로 인한 Self-Join 상의 과부하적인 부분을 해소할 수 있는 방안이 있습니다. 특히 이번 예제에서는 Self-Outer Join에 대 해 사용할 수 있는 분석용 함수를 알아 보고자 합니다. - 인덱스정보 DANGA_HIST_PK : CODE + SEQ_NO (Self-Join이면서 아우터 조인 형태) SELECT A.CODE, A.SEQ_NO, A.PRICE, A.BEGIN_YMD, NVL(B.BEGIN_YMD,'99991231') END_YMD FROM DANGA_HIST A, DANGA_HIST B WHERE A.CODE = B.CODE(+) AND A.SEQ_NO + 1 = B.SEQ_NO(+);.. 더보기
[Tuning] 분석함수의 활용 (셀프조인의 해결) Analytic Functions 의 활용 -> 셀프 조인의 해결 #1 Original Source -- View Merge 현상 발생 SELECT C.BRNCOD, C.CMPID, C.STSDAT, C.STS, C.AMT FROM CUSTOMER C, /* 최종상태*/ (SELECT B.BRNCOD, B.CMPID, B.STSDAT, MAX(B.STS) MAX_STS FROM CUSTOMER B, /* 최종날짜 */ (SELECT BRNCOD, CMPID, MAX(STSDAT) MAX_DAT FROM CUSTOMER WHERE STSDAT 0 call count cpu elapsed disk query current rows ------- ------ -------- ---------- --------.. 더보기
[Tuning] Scalar 서브쿼리 활용 [개요] Sub-query 는 조인과 더불어 자주 사용되고 있습니다. 특히, 아우터 조인과 똑같은 결과를 만들어 내기 위한 방안으로 1) PL/SQL을 이용한 사용자 정의 함수(User defined function)의 사용 2) Scalar Sub-query의 사용 등을 고려할 수 있습니다. 이번 예제에서 는 이러한 두 가지 방안의 내부적 수행원리를 비교해 보도록 하겠습니다. 기본정보 Rule Based Optimizer EC_COURSE : EC_COURSE_PK : COURSE_CODE EC_COURSE_SQ : EC_COURSE_SQ_PK : COURSE_CODE + YEAR + COURSE_SQ_NO EC_COURSE_SQ_IDX_01 : YEAR (Non Unique) 0. Before Tun.. 더보기