본문 바로가기

반응형

전체 글

oracle - COUNT(*)를 빠르게 하기 COUNT(*)를 빠르게 하기 개발을 하다보면 흔히 어떤 테이블에 원하는 데이터가 있는지 세어보는 경우가 가끔 있습니다. 이러한 경우 COUNT(*)를 사용하는데 좀더 빠르게 할 수 있는 방법이 있습니다. COUNT를 할 때 전체 테이블을 FULL SCAN 할 수도 있고 INDEX 영역을 FULL SCAN할 수도 있습니다. TABLE을 전체 FULL SCAN 할 때와 INDEX영역을 FULL SCAN할 때 어디가 빠르다고는 장담하지 못합니다. 이러한 경우 테이블 이나 인덱스의 단일 블록을 SCAN하기 때문에 예측하기가 애매합니다... 인덱스를 SCAN하는데 하나의 블록이 아니라 MULTI BLOCK을 SCAN한다면 어떨까요? 당연히 SINGLE BLOCK을 SCAN하는 것보다 빠를 수 있습니다. 이때 사.. 더보기
oracle - 오라클 CLOB 타입 검색 오라클 CLOB 타입 검색 아래는 otn.oracle.co.kr 의 기술지원 게시판의 내용입니다. ======================================================================No. 12217 CLOB COLUMN을 조회하는 방법========================== 1. CLOB Table 생성. SQL> create table clob1 (clobcol clob); Table created. 2. 문자열 데이터 입력. SQL> insert into clob1 values ('Oracle9i provides everything you need to deploy fast,scalable internet applications to run your .. 더보기
oracle - 25가지 효율적인 SQL 작성법 25가지 효율적인 SQL 작성법 1.데이터와 비즈니스 어플리케이션을 잘 알아야 한다. 동일한 정보는 다른 비즈니스 데이터 원천으로부터 검색될 수 있다. 이러한 원천에 익숙해야 한다. 당신은 당신의 데이터베이스 안의 데이터의 크기와 분포를 반드시 알아야 한다. 또한 SQL을 작성하기 전에 비즈니스 개체 안의 관계와 같은 데이터 모델을 전체적으로 이해해야 한다. 이러한 이해는 당신이 여러 테이블에서 정보를 검색하는데 있어서 보다 좋은 쿼리를 작성할 수 있다. DESIGNER/2000과 같은 CASE TOOLS은 다른 비즈니스와 데이터베이스 객체사이의 관계 를 문서화 하는데 좋은 역할을 한다. 2.실제 데이터를 가지고 당신의 쿼리를 검사하라. 대부분의 조직은 개발, 검사, 제품의 3가지 데이터베이스 환경을 가.. 더보기
oracle - [Hint]힌트는 이런식으로 사용합니다. [Hint]힌트는 이런식으로 사용합니다... [Hint]사용 형식 1. 힌트 구문은 기본적으로 대소문자를 구별하지 않으며 SQL 블록에서 두 가지 형태가 가능 합니다. 형식1)/*+ hint */ …… 형식2)--+hint ……(--+다음에 공백이 있으면 안됩니다.) --+ 보다는 /*+ 로 시작하는 형식을 많이 사용하는데 --+ 형식의 경우 일부 버전의 DB에서는 인식이 되지 않기 때문 입니다. 2. 힌트를 포함하는 주석은 SELECT, UPDATE, DELETE, INSERT 키워드 다음에만 사용할 수 있습니다. 3. 주석에 힌트가 여러 개 있으면 각 힌트는 공백으로 구분되어야 합니다. SQL>SELECT /*+ FULL(E) INDEX(D pk_dept) */ e.ename, d.dname FROM.. 더보기
oracle - [Hint]조인순서 변경(STAR_TRANSFORMATION) [Hint]조인순서 변경(STAR_TRANSFORMATION) 이전 강좌의 STAR HINT와 유사 하지만 몇 가지 다른 점이 있습니다. /*+ STAR */ 힌트 구문을 사용할 때 되면 나타나는 CARTESIAN PRODUCT(Dimension Table의 건수가 몇 건 되지 않아 큰 문제는 되지 않지만…)이 /* STAR_TRANSFORMATION */을 사용할 때는 나타나지 않습니다. Dimension Table의 수가 적고, FACT TABLE의 수가 굉장히 많을 때는 일반적으로 STAR HINT가 유용하며 Dimension Table의 수가 많거나 FACT TABLE의 수가 그리 크지 않으면서 연관된 Dimension Table에 대한 제한 조건 절이 없다면 STAR_TRANSFORMATION .. 더보기
oracle - [Hint]조인순서 변경(STAR) [Hint]조인순서 변경(STAR) STAR힌트는 간단히 star query plan을 이용할 수 있게 하는 힌트인데 여기서 STAR QUERY PLAN이란 거대한 테이블이 조인 순서상 마지막이 되며 조인을 하는 경우 거대 테이블의 결합인덱스가 이용되는 중첩 루프 구조를 보이는 것입니다. (참고로 STAR QUERY PLAN은 DW에서 많이 사용되는 다차원 모델 구조 입니다.) 예를 들어 품목 테이블이 있고 매출실적 테이블이 있다고 했을 때 품목 테이블과 같은 것을 Dimension Table이라 하는데 이러한 테이블로는 Employee(사원), Department(부서)와 같은 것들이 있습니다. 한편 매출실적 테이블과 같은 형태의 테이블을 FACT TABLE이라 하는데 이러한 STAR SCHEMA 구조.. 더보기
oracle - [Hint]조인순서 변경(ORDERED) [Hint]조인순서 변경(ORDERED) 이 힌트는 FROM 뒤에 기술되는 테이블의 순서대로 조인이 일어나도록 해주는 구문이며 대부분 단독으로는 사용되지 않고 USE_NL(중첩 루프 조인을 유도), USE_MERGE(머지 소트 조인을 유도), USE_HASH(HASH 조인을 유도)등과 같이 사용됩니다. USE_NL/USE_MERGE/USE_HASH등의 인자로 사용되는 테이블은 FROM절에서 두 번째로 나타나는 테이블 이어야 하는데 FROM절에서 처음 나타나는 테이블이 드라이빙 테이블(OUTER/DRIVING TABLE)이 되고 나중에 나타나는 테이블이 PROBED TABLE(INNER TABLE)이 되는 것 기억해 두세요… 물론 이 부분은 다음 강좌에서 설명이 이어지지만 잘 알고 계셔야 합니다. 보통 드.. 더보기
oracle - [Hint]조인 방법 변경(USE_NL) [Hint]조인 방법 변경(USE_NL) 조인 방법 변경(USE_NL) 테이블을 조인 하는 경우 중첩 루프 조인(Nested Loop Join)이 일어나도록 하는 힌트 문장 입니다. 중첩 루프 조인은 중첩 반복이라고도 하는데 하나의 테이블(outer/driving table)에서 추출된 로우를 가지고 일일이 다른 테이블(inner/probed table)을 반복해서 조회하여 찾아지는 레코드를 최종 데이터로 간주하는 방법 입니다. 즉 조인 입력 한 개를 외부 입력 테이블로 사용하고, 한 개는 내부(최하위) 입력 테이블로 사용하고 외부 루프는 외부 입력 테이블을 행 단위로 사용하고 각 외부 행에 대해 실행되는 내부 루프는 내부 입력 테이블에서 일치되는 행을 검색 하는거죠… 이것을 원시 중첩 루프 조인이라고 .. 더보기
oracle - [Hint]조인 방법 변경(USE_MERGE) [Hint]조인 방법 변경(USE_MERGE) 머지 조인(Merge Join)이 일어나도록 유도하는 힌트 구문으로 이 경우 거의 SORT를 동반하므로 SORT MERGE JOIN이라고 부릅니다. 머지 조인이란 양쪽 테이블에서 대상 로우를 추출 후 조인 컬럼을 기준으로 SORT를 한 후 최종 결과를 만들어 내는 조인 방식 입니다. USE_NL처럼 FROM 절 다음에 위치하는 테이블의 순서는 중요하지 않은데 그 이유는 어차피 독립적으로 정렬된 후 병합이 일어나므로 중요하지 않다고 할 수 있으며 SORT MERGE JOIN에서는 드라이빙 테이블의 의미가 없습니다. [형식]/*+ USE_MERGE ( table [table]... ) */ [예] 아래 예제는 Oracle 10g에서 돌렸습니다. select /*.. 더보기
oracle - [Hint]조인 방법 변경(USE_HASH) [Hint]조인 방법 변경(USE_HASH) 해시 조인(Hash-Join)은 두 테이블 중 하나를 기준으로 비트맵 해시 테이블을 메모리에 올린 후 나머지 테이블을 스캔 하면서 해싱 테이블을 적용하여 메모리에 로딩된 테이블과 비교하여 매칭되는 데이터를 추출하는 방식 입니다. 성능을 위해서는 당연히 사이즈가 작은 테이블이 메모리에 올라가는 것이 좋으며 이때 이 테이블을 드라이빙 테이블(driving/outer table) 이라고 합니다. 특히 이 해시 테이블이 메모리에 생성되면 성능은 좋으며(메모리에 생성되지 않으면 내부적으로 임시 테이블이 만들어 져야 합니다.) 두 테이블의 크기 차이가 클수록 성능은 좋아집니다. 또한 해시 조인은 안티 조인과 병렬처리와 잘 맞으며 범위 검색(Range scan)이 아닌 동.. 더보기

반응형