Oracle 인덱스 생성

myeonji·2023년 4월 17일
0

oracle

목록 보기
5/5


범위가 작은 데이터를 뽑을 때 유리한 인덱스.



/***
Oracle DB 인덱스 생성
Oracle 19c 기준으로 작성되었습니다.
***/

/***
CUST, CUST_DTL 테이블, 인덱스 상태 조회
STR 계정 접속
***/

SELECT
OBJECT_TYPE,
OBJECT_NAME,
CREATED
FROM USER_OBJECTS
ORDER BY 2,1;

/***
통계 정보 생성
STR 계정 접속
***/

SELECT
TABLE_NAME,
TABLESPACE_NAME,
LAST_ANALYZED
FROM USER_TABLES
ORDER BY 1;

-- 통계 정보 생성
EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>'STR', TABNAME=>'CUST');
EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>'STR', TABNAME=>'CUST_DTL');

-- 통계 정보 삭제
EXEC DBMS_STATS.DELETE_TABLE_STATS(OWNNAME=>'STR', TABNAME=>'CUST');
EXEC DBMS_STATS.DELETE_TABLE_STATS(OWNNAME=>'STR', TABNAME=>'CUST_DTL');

/***
인덱스 추가 생성
테이블명: CUST
인덱스명: CUST_X1(CUST_NM)
STR 계정 접속
***/

SELECT *
FROM STR.CUST
WHERE CUST_NO = '20221125TKDN00000007';

-- CUST_NM 조회
-- 김영칠 3건, 김일영 2건, 김일삼 1건
SELECT *
FROM STR.CUST
WHERE CUST_NM = '김영칠';

CREATE INDEX STR.CUST_X1 ON STR.CUST
(CUST_NM)
TABLESPACE TS_STR_I;

SELECT
TABLE_NAME,
INDEX_NAME,
COLUMN_NAME,
COLUMN_POSITION
FROM USER_IND_COLUMNS
ORDER BY 1, 2;

/***
FBI 인덱스 추가 생성
테이블명: CUST
인덱스명: CUST_X1(CUST_NM)
STR 계정 접속
***/

SELECT *
FROM STR.CUST_DTL
WHERE MBL_NO = '015-0101-0101';

SELECT *
FROM STR.CUST_DTL
WHERE MBL_NO = '01501010101';

SELECT
MBL_NO,
REPLACE(MBL_NO,'-','')
FROM STR.CUST_DTL;

SELECT *
FROM STR.CUST_DTL
WHERE REPLACE(MBL_NO,'-','') = '01501010101';

CREATE INDEX STR.CUST_DTL_X1 ON STR.CUST_DTL
(REPLACE(MBL_NO,'-',''))
TABLESPACE TS_STR_I;

SELECT
A.TABLE_NAME,
A.INDEX_NAME,
B.INDEX_TYPE,
A.COLUMN_NAME,
A.COLUMN_POSITION
FROM
USER_IND_COLUMNS A,
USER_INDEXES B
WHERE A.TABLE_NAME = B.TABLE_NAME
AND A.INDEX_NAME = B.INDEX_NAME
ORDER BY 1, 2;

-- 인덱스 삭제
DROP INDEX STR.CUST_X1;
DROP INDEX STR.CUST_DTL_X1;

0개의 댓글