1. 인덱스(INDEX)
1. 인덱스(INDEX)
[ 정의 ]
- 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조
- 검색(SELECT)을 빠른 속도로 하기 위해서 사용하는 도구
- 특정 키워드(컬럼)만 모아놓은 별도의 테이블
- 인덱스 사용
1) SELECT 작업이 테이블 대상으로 실행 X
2) SELECT 작업이 인덱스 대상으로 실행 O
- Oracle에서는 테이블 생성 시 인덱스를 명시적으로 생성하지 않아도 자동으로 생성한다.
(PK, UNIQUE 제약이 붙은 컬럼은 자동으로 인덱스가 생성된다.)
1) PK를 WHERE절에 조건으로 SELECT ----> 속도 빠름
2) 일반컬럼을 WHERE절에 조건으로 SELECT ----> 속도 느림
SET TIMING ON; --경과시간을 보기위한 호출
-- 인덱스가 없는 상태에서 검색
SELECT DISTINCT NAME FROM tblIndex WHERE NAME = '홍길동'; -- 00:00:03.397
-- 인덱스 생성
CREATE INDEX IDX_TBLINDEX_NAME
ON tblIndx(NAME);
-- 인덱스가 있는 상태에서 검색
SELECT DISTINCT NAME FROM tblIndex WHERE NAME = '홍길동'; -- 00:00:00.005
SELECT DISTINCT JOB FROM tblIndex WHERE JOB = '개발자'; -- 00:00:03.746
----> 확실히 INDEX를 생성한 다음 검색하는것이 빠르다는것을 알 수 있다.
[ 인덱스의 장점, 단점 ]
- 장점: 검색 처리 속도를 향상시킨다.
- 단점: 고비용
[ 인덱스 사용 ]
1) 사용해야 하는 경우
- 테이블 레코드가 많은 경우
- 인덱스를 적용한 컬럼이 WHERE절에 많이 사용되는 경우
- JOIN에 사용되는 컬럼(ON 부모.PK = 자식.FK)
- 검색결과가 원본 테이블의 레코드의 2 ~ 4 %에 해당하는 경우
- 해당 컬럼이 NULL을 포함하는 경우(색인 테이블안에 NULL이 제외)
2) 사용하면 안되는 경우
- 테이블의 레코드가 적은 경우
- 검색 결과가 많은 경우
- 원본 테이블(색인 컬럼) 에서 INSERT, UPDATE, DELETE 작업이 빈번하게 이루어질 경우
[ 인덱스 종류 ]
1) 비고유 인덱스: 색인의 값이 중복이 가능하다.
CREATE INDEX IDX_tblInsa_buseo ON tblInsa(buseo);
--> buseo 컬럼에는 개발부, 영업부, 총무부, 인사부 등등.. 여러 부서가 중복으로 속해있다
2) 고유 인덱스: 색인의 값이 중복이 불가능하다. (PK, Unique)
CREATE INDEX IDX_tblInsa_num ON tblInsa(num);
--> num 컬럼에는 각 고유번호(PK)가 있다.
3) 단일 인덱스: 1개의 컬럼을 대상으로 인덱스 생성
CREATE INDEX IDX_tblInsa_name ON tblInsa(name);
--> name 1개의 컬럼을 대상으로 인덱스 생성
4) 복합 인덱스, 결합 인덱스
CREATE INDEX IDX_tblInsa_buseo_name ON tblInsa(buseo, name);
--> buseo, name 두 개의 컬럼의 인덱스 생성
MEMO>
# 인덱스는 우리가 책에서 원하는 내용을 찾는다고 하면, 책의 모든 페이지를 찾아 보는것은 오랜 시간이 걸린다. 그렇기 때문에 책의 저자들은 책의 맨 앞 또는 맨 뒤에 색인을 추가하는데, 데이터베이스의 index는 책의 색인과 같다.
# 프로젝트와 병행 하면서 수업도 정리하다보니 내 머릿속에 아직 정리가 안되고, 개념이 잘 안잡힌것 같다.
--> 정리안잡힌것: 프로시저, 커서, 트리거, 함수, 인덱스
# 주말 동안 프로젝트 마무리 작업하면서 개념 정리가 아직 덜 된 프로시저, 커서, 트리거, 함수, 인덱스를 공부 더 할 것!!
'인천일보아카데미 > - 학습일지' 카테고리의 다른 글
[학습일지]JAVA교육일지 63일차 (SERVER)⭐ (0) | 2022.07.05 |
---|---|
[학습일지]JAVA교육일지 62일차 (SERVER)⭐ (0) | 2022.07.02 |
[학습일지]JAVA교육일지 60일차 (0) | 2022.06.30 |
[학습일지]JAVA교육일지 59일차 (0) | 2022.06.28 |
[학습일지]JAVA교육일지 58일차 (0) | 2022.06.28 |