728x90

Programming 208

URPOSE

URPOSE 마지막 건을 찾기 위해 SUB-QUERY에 MAX를 취해 마지막건을 추출함으로써 동일한 테이블의 데이터를 두 번 ACCESS 함으로 비효율이 발생됨. 이것을 INDEX_DESC의 HINT를 사용하여 한번만 데이터를 ACCESS하도록 개선한 사례이다. - 대용량 데이터베이스 솔류션I의 부분 범위 처리 활용 방법 참조 - 해당 내용은 실무의 모든 시스템에 비슷한 사례가 반드시 존재하고 있음. TUNING 전 SQL select MEM.rowid ,MEM.MEMO_BAN ,MEM.MEMO_ID, TO_CHAR(MEM.SYS_CREATION_DATE, 'YYYYMMDDHH24MISS') TO_CHAR(MEM.MEMO_DATE,'YYYYMMDDHH24MISS') , MEM.MEMO_TYPE ,MEM...

Programming/Oracle 2008.12.02

or 연산자

논리합 연산자를 사용하는 것은 득보다는 실이 많은 것이 사실이다. 여기에서는 논리합 연산자를 사용할 수 밖에 없는 상황에서 약간의 아이디어를 통해 논리합 연산자를 사용하지 않고 또는 단순 논리합 연산자로 처리하는 방법에 대해서 알아본다. (KEY WORD : 논리합 연산자, IN, OR ) 어느 보험회사의 보험 인수실적을 관리하는 테이블에는 '개포준구분'이라는 컬럼이 있으며, 개별(10), 포괄(20), 준포괄(30) 등의 값을 가지고 있다. 사용자가 화면에서 선택한 구분값에 따라 '개별'일 경우와 '포괄' 또는 '준포괄'등을 포함한 '포괄외'의 두가지 경우로 조회하고자 한다. 여기서는 이 사례 설명의 목적상 성능 및 인덱스와 관련한 설명은 설명한다. 다음의 SQL을 보자. SELECT ………………………..

Programming/Oracle 2008.12.02

테이블 생성시 NULL 컬럼의 적용

테이블을 생성할 때 NULL 컬럼의 적용에 대해서 알아본다. (KEY WORD : INDEX 활용, 인덱스, NULL ) 테이블의 컬럼을 설계할 때 기본값(Default Value)을 ‘NULL’로 할 것인가 아니면 임의의 값(예: X, 0, A등)으로 할 것인가는 인덱스 처리와 밀접한 관계를 가진다. 만약 분포도가 양호한 컬럼이 ‘NULL’로 정의되어 있다면 우리는 어쩔수 없이 전체 테이블을 엑세스하거나 다른 조건의 도운을 받을 수 밖에 없다. 또한 너무 많은 로우를 가진 경우에 컬럼을 ‘NULL’로 지정하지 않고 인덱스를 가지고 있다면 넓은 범위를 인덱스로 처리하게 됨으로써 오히려 불리하게 된다. 다음의 SQL을 보자 SELECT ORD_NO, ORD_DATE, ITEM, ORD_QTY FROM OR..

Programming/Oracle 2008.12.02

Function based index

ORACLE8i에서는 FUNCTION BASED INDEX라는 확장된 INDEX의 개념이 도입되었다. 이것은 이전에 모든 사용자가 원했던 B*Tree 인덱스의 제한사항을 다소 완화시켰다. 그러면 이러한 확장 인덱스가 가지는 의미는 무엇이고, 어떤 매카니즘으로 동작하며, B*Tree 인덱스의 어떤 단점을 보완할 수 있는지 알아보자 SCOPE & APPLICATION FUNCTION BASED INDEX의 기본적인 개념과 활용방안 KEY IDEA Function based index, Index SUPPOSITION DESCRIPTION B*Tree INDEX는 정해진 규칙을 준수해야만 INDEX를 사용할 있어 INDEX 컬럼을 가공해야 하는 경우나 계산된 값으로 driving을 해야 하는 경우에 많은 비효..

Programming/Oracle 2008.12.02

Analytic Function 2

Analytic functions2 RISQL, SQL 확장,Intelligent SQL, Analytic functions SQL이 여러 분야에서 다양하게 사용되긴 하지만, 분석작업을 위한 강력한 기능을 가지고 있지는 않다. 때문에 MOVING AVERAGES, RANKINGS, AND LEAD/LAG COMPARISONS 같은 기본적인 BUSINESS INTELLIGENCE CALCULATION 을 수행하기 위해서는 표준 SQL외에 과도한 프로그램밍 작업을 요구하게 된다. 뿐만 아니라 이러한 작업은 간혹 시스템 성능에 치명적인 장애가 될 수도 있다. ORACLE8i 8.1.6 에서는 이러한 요구들을 다루기 위해 BUSINESS INTELLIGENCE CALCULATION에 대한 새로운 FUNCTION..

Programming/Oracle 2008.12.02

Analytic Function(오라클 윈도우 펑션)

Analytic Function 제1회 Analytic Function의 소개 및 수행원리 Analytic function의 소개 초기 대부분의 RDBMS는 집합적인 개념에 충실하여 만들어 졌기 때문에 집합적인 개념에 위배되는 처리는 표준 SQL로 처리가 불가능 하였다. 그래서 이러한 작업은 프로그램 로직으로 처리 하거나 데이터의 복제 등 다양한 응용 고난도 SQL( 대용량 데이터베이스 2권 참조)을 활용하여 처리 해야만 했다. 그러나 프로그램에서 로직으로 처리할 경우 집합 개념의 RDB시스템에서 심각한 성능저하를 유발할 수 있다는 점을 ”고성능 DB구축을 위한 핵심요소의 이해”를 읽으신 분들은 이해하실 수 있을 것이다. 즉 고가의 고성능 RDB를 구입해 놓고 DBMS를 단지 Data 저장소로만 사용하는..

Programming/Oracle 2008.12.02

HINT

힌트의 파싱과 힌트구문 오류에 대한 처리 ======================================= 옵티마이져가 쿼리를 분석하여 실행계획을 수립할때 힌트도 파싱을 합니다.. 일반적으로 힌트에서 힌트간의 우선 순위는 거의 없습니다.. 일부 힌트의 경우 특정힌트가 나오면 무시되거나 하는것은 있습니다.. 우리가 쿼리 문장에 힌트를 기술시 힌트에 따라, 또는 테이블 엘리어스를 사용하는것에 따라 또는 테이블명을 직접 기술해야만 하는 힌트도 있습니다.. 힌트의 파싱 옵티마이져가 힌트를 파싱할때 쿼리 블럭의 스키마도 같이 파싱하는 것은 아닙니다.. 단지 구문을 파싱하며 체크할 뿐입니다.. 즉 간단히 예를 들면 SELECT * FROM EMP WHERE EMPNO > 10 ; 이 구문을 가지고 예를 들면 ..

Programming/Oracle 2008.12.02

JOIN

조인은 두 집합간의 곱으로 데이터를 연결하는 가장 대표적인 데이터 연결 방법이다. 종류에는 Nested Loop Join, Sort Merge Join 그리고 Hash Join이 있다. 1 * M = M 과 M * 1 = M 의 결과집합이 동일한 것처럼 Optimizer가 3가지의 조인 중 어떤 것을 선택할지라도 결과집합은 동일하다. 하지만 수행속도 측면에서 본다면 조인하고자 하는 두 집합의 데이터 상황에 따라 어떤 조인을 선택하느냐, 어떤 집합을 먼저 선행하느냐 에 따라 수행속도에 미치는 영향은 크다. 100쌍의 남녀가 사랑의 짝짓기 하는 것에 비추어 3가지 조인방식이 수행되는 원리를 설명해 보자. 남녀 모두는 자기 원하는 상대방의 번호표 하나씩 가지고 있고, 한 사람은 여러 사람으로부터 선택 받을 수..

Programming/Oracle 2008.12.02

절차형을 sql로 전환

절차형 처리를 SQL로 처리함으로서 액세스의 효율화 , 수행속도의 최적화에 대한 SAMPLE에 대해 알아본다 통신회사의 요금계산 고객의 실적을 관리하는 회사의 고객 실적집계 등 여러 곳에서 사용되어지는 집계 정보를 생성하는 곳에서 유용하게 사용할 수 있다. 여러 기간에 걸처진 고객의 상태변화를 가장 적은 단위(1일)로 나누어서 계산한다. 인식의 변화가 필수적이라 하겠다. 어느 통신 회사에서는 지난 달 사용자의 사용 실적에 따라 매월 청구 작업을 하고 있다. 월 사용료는 정액제로 계산되나 사용자의 특별한 사유에 따라 다양한 경우의 감액 요인이 발생한다. 예를 들어 장애자에 대한 감액, 연체에 의해 강제로 사용 정지를 당했을 때의 감액, 분실로 인해 일정 기간 사용이 중지된 경우의 감액 등이 있다. 빈번하게..

Programming/Oracle 2008.12.02

인덱스 컬럼의 변경

인덱스 컬럼의 변형은 결국 인덱스를 사용하지 못하게 되어 수행속도에 많은 악 영향을 끼친다. 여기에서는 인덱스 컬럼의 외부적(External) 변형에 대해서 알아보고 그 대체방안에 대해서 알아본다. (KEY WORD : INDEX 활용, 인덱스, 외부적인변형, Suppressing ) 인덱스 컬럼에 변형이 일어나면 상대값과 비교되기 전에 먼저 가공이 된 후에 비교된다. 하지만 인덱스는 가공되기 전의 값으로 생성되어 있기 때문에 당연히 인덱스를 사용할 수 없게 된다. 여기에서 외부적(External) 변형이란 사용자가 인덱스를 가진 컬럼을 어떤 SQL함수나 사용자 지정함수(User Defined Stored Function), 연산, 결합(||) 등으로 가공을 시킨 후에 발생되는 것이며 이러한 거의 모든 ..

Programming/Oracle 2008.12.02
728x90