반응형
※ 이력테이블 인덱스 설계시 고려사항
1. 점 이력(Point-in-Time)
점 이력은 특정 시점에서 데이터의 상태를 기록하는 방식입니다. 데이터의 변경 사항을 추적하고 해당 시점에서 데이터의 값을 유지합니다. 예를 들어, "고객" 테이블을 생각해보겠습니다. 다음은 "고객" 테이블의 일부분입니다. +--------+------------+------------+ | 고객ID | 이름 | 가입일자 | +--------+------------+------------+ | 1 | John | 2021-01-01 | | 2 | Sarah | 2021-03-15 | | 3 | Mike | 2021-05-10 | +--------+------------+------------+ 이 경우, 점 이력을 사용하여 특정 날짜에서의 고객 데이터를 추적할 수 있습니다. 예를 들어, "2022-02-01"에 "고객" 테이블의 상태를 확인하고 싶다면, 해당 날짜의 상태를 유지합니다. +--------+------------+------------+ | 고객ID | 이름 | 가입일자 | +--------+------------+------------+ | 1 | John | 2021-01-01 | | 2 | Sarah | 2021-03-15 | | 3 | Mike | 2021-05-10 | +--------+------------+------------+ 이렇게 데이터의 특정 시점에서의 상태를 추적하는 것이 점 이력입니다. |
2. 선분 이력(Temporal)
선분 이력은 데이터의 변경 사항을 추적하면서 데이터의 유효 기간을 관리하는 방식입니다. 각 데이터에는 시작 시간과 종료 시간이 포함됩니다. 예를 들어, "고객" 테이블을 생각해보겠습니다. 다음은 "고객" 테이블의 일부분입니다. +--------+------------+------------+------------+ | 고객ID | 이름 | 유효시작일 | 유효종료일 | +--------+------------+------------+------------+ | 1 | John | 2021-01-01 | 2022-06-30 | | 1 | John | 2022-07-01 | 9999-12-31 | | 2 | Sarah | 2021-03-15 | 2023-02-28 | | 2 | Sarah | 2023-03-01 | 9999-12-31 | | 3 | Mike | 2021-05-10 | 9999-12-31 | +-------- |
- INDEX(유효시작일 + 유효종료일)를 태우기 위해 유효 종료일에 9999값을 넣고(null값대신) 관리하는 경우도 있음.
* null 값이 들어가면 인덱스를 못 태우기 때문
* 유효시작일 <= '2021-02-02' <= 유효종료일 조건으로 검색시, 유효종료일에 null이 있으면 값이 추출이 안됨
* 인덱스(유효종료일 + 유효시작일)이 더 효율적으로 데이터 조회 가능 - 종료일이 미정인 고객을 검색할떄는 where 유효종료일 = 9999년 이렇게 불러오면 되서, 특정 시점의 데이터도 조회할 수 있다
- 성능관점으로 봤을때 선분 이력으로 관리한다고 성능이 더 좋은 것은 아니다.
반응형
'Database > Tuning' 카테고리의 다른 글
[ORACLE] set autot 옵션, dbms_xplan.display (0) | 2022.11.27 |
---|---|
[ORACLE] V$SQL (0) | 2022.07.11 |
[Index Tunning] Random Access 제거 (2) | 2022.04.25 |