Oracle DBMS/Oracle 튜닝 1 [인덱스 튜닝](7)
-
[SQL 튜닝 실습 1-7] 테이블 풀 스캔 튜닝
실습 준비 테이블 생성 : TB_ORD CREATE TABLE TB_ORD ( ORD_NO VARCHAR2(10), --주문번호 ORD_DT VARCHAR2(8), --주문일자 ORD_NM VARCHAR2(150), --주문이름 ORD_AMT NUMBER(15), --주문금액 PRDT_CD VARCHAR2(6), --상품코드 SALE_GB VARCHAR2(2), --판매구분 PAY_GB VARCHAR2(2), --결제구분 CUST_ID VARCHAR2(10), --고객ID INST_DTM DATE, --입력시간 INST_ID VARCHAR2(50), --입력자ID UPDT_DTM DATE, --수정시간 UPDT_ID VARCHAR2(5) --수정자ID ); 데이터 입력 CREATE TABLE DUAL_1..
2020.01.20 -
[SQL 튜닝 실습 1-6] 테이블 풀 스캔 튜닝 개념
선택도 인덱스 스캔이 테이블 풀 스캔보다 무조건 유리하다고 알고있는 개발자가 많아서 실행 계획에 테이블 풀 스캔에 대한 정보만 나오지 않으면 성능이 좋은 쿼리로 생각하고 운영장비에 해당 SQL문을 적용하지만, 인덱스 스캔이 테이블 풀 스캔에 비해 반드시 유리한 건 아니다. SEX라는 컬럼이 있다고 치면, 성별은 남, 녀 만 존재한다 해당 컬럼을 인덱스로 생성해서 인덱스 스캔을 수행할 경우 테이블 전체의 행들의 50%에서 인덱스 스캔을 통한 테이블 랜덤 액세스가 발생하게 된다 또한, 일반적인 인덱스 스캔은 싱글 블록 I/O 읽기인데 테이블 풀 스캔은 멀티 블록 I/O 읽기이다. 이러한 2가지 이유로 SEX라는 컬럼을 조건절에 줘서 스캔할 경우 인덱스 스캔보다 테이블 풀 스캔이 더 유리하다. 선택도 구하는 ..
2020.01.20 -
[SQL 튜닝 실습 1-5] 인덱스 풀 스캔 튜닝
실습목표 : 인덱스 패스트 풀 스캔을 활용해서 집계결과 검색하기 실습 준비 실습 준비 테이블 생성 : TB_SUPP CREATE TABLE TB_SUPP ( SUPP_NO VARCHAR2(10), --공급업체번호 SUPP_NM VARCHAR2(50), --공급업체명 INST_DT VARCHAR2(8), --가입일자 INST_TM VARCHAR2(6), --가입시간 INST_ID VARCHAR2(50) --입력자ID ); 데이터 입력 : DUAL_1000 테이블을 생성해서 데이터 복제에 사용한다. CREATE TABLE DUAL_1000 ( DUMMY CHAR(1) ); INSERT INTO DUAL_1000 SELECT DUMMY FROM DUAL CONNECT BY LEVEL 2 > 1 > 0 4 : ..
2020.01.20 -
[SQL 튜닝 실습 1-4] 인덱스 풀 스캔 튜닝 개념
인덱스 풀 스캔 인덱스도 하나의 객체로 인덱스 스캔 후 구성 컬럼만으로 결과 집합을 도출할 수 없는 경우, 항상 테이블 랜덤 액세스가 일어나게 된다. 테이블 랜덤 액세스는 DBMS 성능의 큰 장애물이다. * 테이블 랜덤 액세스를 최소화한다 * 테이블 순차 액세스를 최대화한다 인덱스 풀 스캔은 인덱스라는 객체만을 풀 스캔해서 원하는 데이터를 가져오는 것으로, 인덱스 튜닝에서 아주 중요한 부분을 차지한다. 인덱스 풀 스캔의 종류 * 인덱스 풀 스캔 * 인덱스 패스트 풀 스캔 오라클은 데이터를 가져올 때 항상 블록 단위로 가져온다 단, 한 건의 행만 가져온다고 해도 해당 행이 속해있는 블록 전체를 가져오게 된다 (*) 오라클은 한 블록당 8KB의 디스크 공간을 차지하는데, 이게 바로 블록 단위 I/O 이다. ..
2020.01.20 -
[SQL 튜닝 실습 1-3] 인덱스 스캔 튜닝
실습 목표 : 인덱스 구성 컬럼을 추가해서 테이블 랜덤 액세스 제거하기 실습준비 테이블 생성 : TB_ORD CREATE TABLE TB_ORD ( ORD_NO VARCHAR2(10), --주문번호 ORD_DT VARCHAR2(8), --주문일자 ORD_NM VARCHAR2(150), --주문이름 ORD_AMT NUMBER(15), --주문금액 PRDT_CD VARCHAR2(6), --상품코드 SALE_GB VARCHAR2(2), --판매구분 PAY_GB VARCHAR2(2), --결제구분 CUST_ID VARCHAR2(10), --고객ID INST_DTM DATE, --입력시간 INST_ID VARCHAR2(50), --입력자ID UPDT_DTM DATE, --수정시간 UPDT_ID VARCHAR2(5..
2020.01.20 -
[SQL 튜닝 실습 1-2] 인덱스 스캔 튜닝
실습 목표 : 인덱스를 최대한 활용해서 원하는 결과 검색하기 실습 준비 테이블 생성 : TB_CUST CREATE TABLE TB_CUST ( CUST_ID VARCHAR2(10), --고객ID CUST_NM VARCHAR2(50), --고객명 BIRTH_DT VARCHAR2(8), --생일 INST_DT VARCHAR2(8), --입력일자 INST_ID VARCHAR2(10), --입력자ID INST_NM VARCHAR2(50) --입력자명 ); 테이블 생성 : TB_ORD CREATE TABLE TB_ORD ( ORD_NO VARCHAR2(15), --주문번호 ORD_DT VARCHAR2(8), --주문일자 PRDT_CD VARCHAR2(6), --제품코드 ORD_AMT NUMBER(15), --주문..
2020.01.20