반응형
1. 인덱스란?
- 데이터 행의 검색 속도를 향상시키기 위해서 사용되는 데이터베이스 객체다
- 인덱스는 테이블과 독립적으로 존재한다
2. 인덱스가 왜 필요할까?
Full Table Scan
- 대용량 데이터에 조회 비효율적이다.
Index Range scan
- 인덱스 설정 할 시에 조회 성능이 좋아진다
- 10만건 기준 5.62s -> 0.01s
3. 인덱스의 구조와 원리
- B+-Tree 인덱스 구조를 가진다.
4. 인덱스를 언제 쓰는 게 좋을까?
- where 절이나 조인조건에 자주 사용되는 경우
- 컬럼이 매우 다양한 값을 포함하고 있는 경우 (남녀 이런건 별로)
- 데이터가 아주 많은 테이블을 대상으로 조회작업을 했을 때 대부분의 조회작업에서= 검색되는 행이 전체 데이터의 10%미만인 경우
- 인덱스 생성이 필요하지 않는 경우
- 테이블이 작은 경우
- 테이블이 자주 갱신되는 경우 (Insert update delete)
- 인덱스화된 열이 표현식의 일부로 사용되는 경우
- where절의 조회 조건으로 자주 사용되지 않는 경우
- 대부분의 조회작업에서 전체 데이터의 10%이상 검색되는 경우
5. 인덱스 생성
- 자동 생성값들은 자동으로 인덱스가 생성된다.
- 테이블 정의할 때 primary key 제약조건, unique 제약조건이 정의된 컬럼의
- 수동 생성
- 사용자가 행에 대한 엑세스 시간을 줄이기 위해서 특정 열을 대상으로 인덱스를 생성할 수 있다.
- 인덱스 생성하기
create index 인덱스명 on 테이블명 (컬럼명, ....)
- 인덱스 삭제하기
DROP INDEX 인덱스명
6. 인덱스 사용
- optimizer가 알아서 실행
- /힌트 사용/
- 주의 사항
1. 인덱스 컬렁 가공
ex) where substr(order_no, 1, 4) = '2021' -> where order_no like '2021%'
2. 인덱스 컬럼의 묵시적 형변환 (같은 타입으로 비교해야 함)
ex) where reg_date = '19930331' -> where reg_date = TO_DATE('19930331','YYYYMMDD')
3. 인덱스 컬럼 부정형 비교
ex) where mem_type != '10' -> where mem_type in ('20','30')
4. LIKE 연산자 사용 시 %가 앞에 위치
5. OR 조건 사용 -> UNION ALL로 대체
7. 인덱스 Column설정 기준
- Cardinality(기수성)가 높은 것
- the number of elements in a set or group (요소 수)
8. Clustered Index
- PK를 지정하면 자동적으로 Clustered Index가 생성 된다.
- 테이블당 한 개만 생성이 가능
- 행 데이터를 인덱스로 지정한 열에 맞춰서 자동 정렬함
생각
pk를 email로 설정했을 때 (즉 인덱스컬럼이 email일 때) 발생할 수 있는 성능 이슈는?
@Id
@NotBlank
@Email
private String email;
추가적으로
- NonClustered Index
- Compositive key
참고
https://www.youtube.com/watch?v=9ZXIoh9PtwY
'데이터베이스' 카테고리의 다른 글
[Oracle] ORA-28002: the password will expire within 7 days (0) | 2020.12.19 |
---|---|
[DB][Oracle] DBMS_LOB 함수 성능테스트 (0) | 2020.11.18 |
[SQL][Oracle] 조인이란? (0) | 2020.11.08 |
[SQL] [oracle] 오라클 내장함수 (0) | 2020.11.08 |
[DB] [Oracle] 오라클 데이터 타입 (0) | 2020.11.08 |