2025/05 2

MySQL 파티셔닝이란

* 모든 설명은 InnoDB 스토리지 엔진 기준으로 작성했습니다. 프로젝트에 스토리지 엔진이라는걸 설정한 적이 없다면, InnoDB가 기본값으로 적용되어있을 것입니다. 파티셔닝이란? 데이터의 특정 칼럼값을 기준으로 데이터를 분류하고, 분류한 데이터들을 서로 다른 물리적 파티션에 할당하는 것을 말한다.샤딩과 달리 나눠진 데이터가 동일한 데이터베이스 내부에 존재하므로 아래와 같은 편리함이 있다.- MySQL 서버 라우팅을 위한 추가 로직이 필요없다.- 파티션이 다른 데이터간에도 조인이 가능하다. (그렇다고 효율적이진 않다)똑같이 인덱스를 통해 쿼리를 처리하더라도, 데이터를 여러 파티션으로 분리하므로 인덱스 트리의 크기도 함께 작아지고 I/O의 범위가 작아지는 효과가 있다.파티션이라고 해서 테이블과 별반 다르..

B tree 삽입, 삭제 알고리즘과 DB 인덱스

문제상황DB 칼럼에 시간 칼럼을 넣는것을 잊어서 뒤늦게 createdAt 필드를 추가하고, 기존 필드는 null로 채웠다.createdAt을 통한 쿼리가 빈번하므로 아래처럼 신규 인덱스를 함께 만들어서 쿼리 효율을 높이기로 했다.ALTER TABLE mytableADD COLUMN createdAt DATE NULL;CREATE INDEX idx_createdAt ON mytable (createdAt);근데 B tree와 비슷한 BST 트리를 생각하면, 시간순으로 데이터가 들어오는 경우에는 트리가 점점 한쪽으로 치우치게 되어 O(n)에 가까운 끔찍한 효율성을 가지게되는거 아닌가 하는 생각을 했다.B tree에서 삽입 삭제는 어떻게 관리되고, 시간 칼럼에 대해 인덱스를 만들때 골고루 들어올 때 보다 불리..