본문 바로가기

반응형

프로그래밍/oracle

오라클 COUNT(*) 빠르게 하기 — 인덱스 패스트 풀 스캔 활용법 개발을 하다 보면 특정 테이블에서 원하는 데이터가 존재하는지 빠르게 확인하고 싶을 때가 있습니다. 이때 흔히 사용하는 것이 바로 COUNT()인데, 이 방법도 성능 최적화를 통해 훨씬 더 빠르게 사용할 수 있습니다. 오늘은 오라클에서 COUNT()를 빠르게 수행하는 방법 중 하나인 인덱스 패스트 풀 스캔(Index Fast Full Scan)에 대해 알아보겠습니다.​1. COUNT(*) 수행 방식COUNT(*)를 수행할 때 오라클은 두 가지 방식으로 데이터를 스캔할 수 있습니다.테이블 전체를 FULL SCANINDEX 영역을 FULL SCAN어떤 방식이 빠를지는 테이블의 구조와 데이터 분포에 따라 다릅니다. 일반적으로 INDEX 영역을 스캔하는 것이 빠를 때가 많지만, 단일 블록 스캔(Single Blo.. 더보기
oracle - 오라클 힌트(Hint) 사용 예제 오라클 힌트(Hint) 사용 예제 SQL*Plus로 scott 계정으로 로그인한 후 test라는 테이블을 만들어 실습을 합니다. SQL> create table test ( 2 id number not null primary key, 3 name varchar2(20) 4 ); 테이블이 생성되었습니다. 데이터는 5건 넣는데 순서를 잘 보시기를 바랍니다.기본적으로 select하면 넣은 순서대로 나옵니다. SQL> insert into test values (4,'4길동'); 1 개의 행이 만들어졌습니다. SQL> insert into test values (3,'3길동'); 1 개의 행이 만들어졌습니다. SQL> insert into test values (5,'3길동'); 1 개의 행이 만들어졌습니다. .. 더보기
oracle - 효과적인 MAX(num) 가져오기 (오라클힌트사용) 효과적인 MAX(num) 가져오기 (오라클힌트사용) 테이블 시퀀스를 가져올 때 가끔 사용하는 MAX()함수보다 효과적인 방법이 있다.레코드가 방대한 경우 비교할 수 없다. 기존 방식MAX()함수는 전체 범위를 정렬해서 그 중 가장 큰 것을 걸러내는 다량의 처리 작업을 거친다. SELECT NVL(MAX(seq)+1,1) FROM board; 개선한 방식seq 컬럼에 index가 걸려 있다는 가정하에 오라클힌트 index_desc를 사용한다.index_desc를 사용하면 색인을 거꾸로 엑세스하여 단 한건만 읽고 멈춘다. (rownum = 1)SELECT /*+ index_desc(b idx_board_seq) */ seqFROM boardWHERE rownum = 1 더보기
oracle - 행을 열로 바꾸는 쿼리 행을 열로 바꾸는 쿼리 오늘은 오라클에서 행을 열로 바꾸는 쿼리를 말씀드릴꼐요~ 가끔 개발을 하보면 회원별로 어떠한 이벤트나 기타 등등에 얼마나 참여 하였는지를 표현해 주어야 할때가 있습니다. 그럴떄 유용한 쿼리 입니다. --격자형 자료로 추출하기select code, min(decode(ROW_NO,01,jumsu)) deps1, min(decode(ROW_NO,02,jumsu)) deps2, min(decode(ROW_NO,03,jumsu)) deps3, min(decode(ROW_NO,04,jumsu)) deps4from(SELECT row_number() over (partition by deps_code ORDER BY code) ROW_NO, mem_id, jumsu, step_codeFROM.. 더보기
oracle - 클러스터 클러스터 디스크로부터 데이터를 읽어오는 시간을 줄이기 위해서 조인이나 자주 사용되는 테이블의 데이터를 디스크의 같은 위치에 저장시키는 방법 입니다. ◈ 클러스터된 테이블과 클러스터 되지 않은 테이블의 차이 테이블이 처음 생성될 때 행은 일반적으로 세그먼트의 첫 익스텐트의 첫 블록부터 삽입됩니다. 정규 테이블로 저장될 경우 EMP와 DEPT은 서로 다른 세그먼트에 위치하게 됩니다. 이 말은 테이블이 자신들 고유의 블록을 사용한다는 뜻입니다. 즉, EMP 테이블의 행을 저장하는데 사용된 블록은 DEPT 테이블의 데이터를 저장하지 않는다는 말입니다. 그 반대의 경우도 마찬가지입니다. 테이블 EMP와 DEPT의 클러스터로 저장되면 동일 클러스터 세그먼트를 공유하게 됩니다. 이 세그먼트의 블록은 양 테이블의 행을.. 더보기

반응형