Skip to main content

인덱스

SQL 실행 계획

  • SQL Developer에서 SQL 구문에 F10 키를 누르거나 다음 명령을 실행
EXPLAIN PLAN FOR SELECT * FROM TB_COMPANY_MASTER; -- 실행 계획 생성
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); -- 실행 계획 보기
  • OPTIONS: 처리 방법(FULL: 테이블 전체를 스캔)
  • CARDINALITY: 예상되는 실행 결과 행 수 (실제 결과와 크게 다를 경우 질의가 비효율적)
  • COST: 예상되는 실행 비용 (비용이 높으면 질의가 비효율적)
  • 실제 실행은 역순으로 이뤄짐(하위 실행의 결과가 모여서 상위 실행 결과가 됨)

옵티마이저(Optimizer)

  • 사용자가 입력한 구문을 최적화해주는 부분
  • 비용 기반 옵티마이저:
    • 수많은 '후보 실행 계획'을 생성 (예: A->B NL Join, B->A Hash Join...)
    • 통계 정보(Statistics) 를 바탕으로 각 계획의 비용(Cost) 을 추정
    • 가장 비용이 낮은 계획을 최종 선택

옵티마이저 작동 예시

  • 서브쿼리
SELECT * FROM
(SELECT * FROM TB_COMPANY_MASTER WHERE HQ_ADDRESS LIKE '%강남구%')
WHERE LISTING_DT > '1990-01-01';
  • 실제로는 AND 조건으로 결합해서 한 번에 검색

(실행 계획 예시) TABLE ACCESS (FULL) Filter Predicates: AND HQ_ADDRESS LIKE '%강남구%' LISTING_DT > '1990-01-01'

인덱스(index)

  • 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조
  • 장점
    • 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있음
    • 전반적인 시스템의 부하를 줄일 수 있음
  • 단점
    • 인덱스를 관리하기 위해 DB의 저장공간이 필요
    • 데이터 변경 시 인덱스도 변경되어야 하므로 추가 작업이 필요
    • 잘못 사용하면 오히려 성능이 저하
  • 인덱스가 있거나 없어도 SQL 문의 실행 결과는 같음(속도만 달라짐)
  • 같은 의미면 인덱스를 사용하여 속도를 높일 수 있도록 질의 작성

인덱스의 자료 구조

  • 분기(branch) 블록: 검색을 위한 용도
  • 잎(leaf) 블록: 키 값(rowid)을 저장

인덱스 정보 보기

  • TB_COMPANY_MASTER의 인덱스 보기
SELECT
INDEX_NAME, -- 이름
INDEX_TYPE, -- 유형
UNIQUENESS -- UNIQUE 여부
FROM ALL_INDEXES
WHERE TABLE_NAME = 'TB_COMPANY_MASTER';
INDEX_NAMEINDEX_TYPEUNIQUENESS
IDX_COMPANY_NMNORMALNONUNIQUE
IDX_COMPANY_EST_DTNORMALNONUNIQUE
IDX_COMPANY_COVER_CAT_NMNORMALNONUNIQUE
IDX_COMPANY_CEO_UPPERFUNCTION-BASED NORMALNONUNIQUE
PK_COMPANY_MASTERNORMALUNIQUE
SYS_C008505NORMALUNIQUE

인덱스를 구성하는 컬럼

  • TB_COMPANY_MASTER의 인덱스를 구성하는 컬럼 보기
SELECT
INDEX_NAME, -- 인덱스 이름
COLUMN_NAME, -- 컬럼 이름
COLUMN_POSITION -- 인덱스에서 컬럼의 순서
FROM ALL_IND_COLUMNS
WHERE TABLE_NAME = 'TB_COMPANY_MASTER'
ORDER BY INDEX_NAME, COLUMN_POSITION;
INDEX_NAMECOLUMN_NAMECOLUMN_POSITION
IDX_COMPANY_CEO_UPPERSYS_NC00019$1
IDX_COMPANY_COVER_CAT_NMCOMPANY_TYPE_CAT1
IDX_COMPANY_COVER_CAT_NMCOMPANY_NM2
IDX_COMPANY_EST_DTESTABLISH_DT1
IDX_COMPANY_NMCOMPANY_NM1
PK_COMPANY_MASTERBIZ_REG_NO1
SYS_C008505COMPANY_CD1

퀴즈

사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.

Q&A