[SQL] 이력관리 (점 이력, 선분 이력)

반응형

※ 이력테이블 인덱스 설계시 고려사항

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