INDEX
부트캠프(END)/Oracle2022. 7. 4. 12:51
INDEX
검색 속도를 빠르게 하기 위한 기능이다.
데이터량이 많고 검색 위주로 수행하는 프로그램을 위해 사용한다.
INSERT, UPDATE, DELETE 등의 작업이 많으면 굳이 사용하지 않아도 된다.
PRIMARY KEY로 지정된 컬럼은 자동으로 INDEX가 된다.
인덱스의 종류
1. 비고유 인덱스
주로 검색 대상이 되는 컬럼명
→ 맛집명, 위치, 영화명, 등...
2. 고유 인덱스
UNIQUE, PRIMARY KEY
→ 인덱스가 자동 생성되어있음.
언제 사용하는가?
- 구별된 값이 많은 컬럼(PRIMARY KEY)의 데이터가 많은 경우
KEY를 주면 저장된 위치를 바로 갖고 오는 인덱스가 저장되는 구조 : B-Tree
쉽고 빠르게 데이터를 찾을 수 있는 구조다! (자료를 쉽고 빠르게 찾을 수 있도록 만듦
즉, 검색 속도를 최적화시킨다......→ INDEX
SELECT rowId
FROM table_name
위 명령어로 각 테이블의 rowId를 확인할 수 있다.
AAAR9d AAH AAAACP AAA
Object번호(table번호) 데이터 번호(dbf파일에 저장된다)
데이터 블록 번호 고유번호(ROW번호)
인덱스를 사용한다고 해서 반드시 빨라지지는 않는다.
데이터의 양이 적을 때는 큰 의미가 없을 수도 있음
--인덱스 생성
CREATE [UNIQUE] INDEX index_name ON table_name(column_name); --ASC
CREATE [UNIQUE] INDEX index_name ON table_name(column_name DESC); --DESC
--2개 이상의 컬럼으로 만들 때는 콤마(,)로 구분
--인덱스 삭제
DROP INDEX index_name;
--데이터 변경시 리빌드
--데이터의 변경이 일어나면 바뀐 데이터를 반영하여 빨리 찾아줄 수 있는 구조로 리빌드가 필요하다.
--(수정 삭제가 많은경우에는 수정/삭제가 수시로 이루어지는 곳에서는 인덱스를 사용하지 말아라)
ALTER INDEX index_name REBUILD
--PRIMARY KEY, UNIQUE의 INDEX 사용방법
SELECT /*+ INDEX_ASC(테이블명 제약조건명) */ 불러올 컬럼명 ...
FROM 테이블명
SELECT /*+INDEX_DESC(table_name 제약조건명) */ 불러올 컬럼명 ...
FROM 테이블명
SELECT /*+INDEX(table_name index_name) */
--저장된 모든 index 보기
SELECT * FROM user_indexes
WHERE table_name = 'BOOKS'
SELECT * FROM books
WHERE title LIKE '%java%'
ORDER BY title ASC
CREATE INDEX idx_books_title ON books(title)
SELECT /*+ INDEX(books idx_books_title) */ *
FROM books
WHERE title LIKE '%java%'
PRIMARY KEY로 지정된 컬럼의 경우 별도의 인덱스 생성 없이 사용 가능하다.
SELECT /*+INDEX_ASC(books books_no_pk)*/ *
FROM books
SELECT /*+INDEX_DESC(books books_no_pk)*/ *
FROM books
'부트캠프(END) > Oracle' 카테고리의 다른 글
PL/SQL : FUNCTION, CURSOR (0) | 2022.07.05 |
---|---|
VIEW, Sequence (0) | 2022.07.01 |
JDBC 예제(JOIN 데이터 불러오기) (0) | 2022.06.30 |
댓글()