이력 테이블 파티셔닝 관련 질문입니다 (도와주세요 !!ㅠㅠㅠ) 0 1 418

by 변은빈 [DB 모델링/설계] 파티셔닝 이력 테이블 로그 테이블 [2020.06.03 14:17:28]


안녕하세요 현재 만들어져 있는 log table 관리의 필요성을 느껴 파티셔닝을 계획하고 있는 개발자 입니다.

파티셔닝 작업은 처음이라 많은 점이 혼란스러운데 답변 달아주시면 감사하겠습니다 ㅠ

 

우선 제 log talbe은 아래와 같이 구성되어있습니다.

Field Type Null Key Default Extra
order_code int(20) NO PRI NULL  
index bigint(20) unsigned NO PRI NULL auto_increment
user varchar(10) YES   NULL  
corporation int(10) YES   NULL  
content varchar(60) YES   NULL  
register_date datetime YES   CURRENT_TIMESTAMP  

제가 위와 같이 테이블을 구성한 이유는 로그 데이터를 접근하는 가장 빈번한 경우가 특정 주문에 관련한 로그를 확인하는 경우이기 때문입니다.

즉 SELECT * FROM log_talbe WHERE order_code = 2 과 같은 쿼리 문을 통한 데이터 접근이 잦습니다. 

order_code 를 where 조건으로 한 쿼리가 주로 사용될 것이기 때문에 order_code가 primary key을 첫 번째 칼럼이 되도록 설정해주었습니다.

 

여기까지가 테이블에 대한 설정입니다. 이 테이블을 파티션하고 싶은데 두 가지 의문점이 생겨서 질문드립니다.

 

1) 보통 로그 테이블을 파티션 할 때 날짜(register_date)를 기준으로 진행하시던데, 이러한 기준을 제 상황에 적용하는 것이 맞을까에 대한 의문입니다.
 저는 where 조건에 order_code 를 주로 사용하는데 partition이 날짜 기준으로 설정된다면 결국 파티셔닝의 이점을 제대로 사용하지 못하고 풀 스캔을 하게 되는 것이 아닌지 질문드립니다.

 

2) range 파티션에 날짜를 기준으로 거는 것 외에 다른 파티션 방법에 대한 아이디어가 있으신지 질문드립니다. 

by ㅇㅇ준 [2020.06.03 16:07:01]

1. TABLE을 PARTITION 으로 구성하여도 인덱스 스캔은 이루어 집니다. 다만 파티션 별 인덱스(LOCAL 인덱스일경우)를 스캔하며 효율이 조금 떨어질수는 있습니다.

  하지만 PARTITION KEY 값에 대한 범위를 줄 수 있다면 큰 걱정은 하지 않으셔도 괜찮을 거라 생각합니다.

 

2. PARTITIION으로 구성하고자 하시는 이유가 어떤걸까요?

언제 이전에 들어온 데이터를 지우기 쉽게(DROP PARTITION)하려는 목적이라면 기간이 낫겠습니다.

 

참고) PK 제약조건을 걸어야 한다면 파티션을 구성하는 키는 PK 에 구성되어 있는 컬럼이어야합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입