mojh7 / real-mysql-study

:orange_book: Real MySQL 8.0 study
0 stars 0 forks source link

2023/05/29 ~ 2023/06/08 #55

Open mojh7 opened 1 year ago

mojh7 commented 1 year ago

다음 스터디

2023-06-08 pm 09:00 목요일

정리 범위

  1. 13.3.4 ~ 13.3.4.2
  2. 13.3.5 ~ 13.3.6
github-actions[bot] commented 1 year ago

정리 범위 무작위 선택 봇 🔎

  1. 장현
  2. 단비
mojh7 commented 1 year ago

13.3.4 키 파티션

해시 파티션과 사용법과 특성이 거의 같다

해시 파티션은 해시 값을 계산할 때 쓰이는 파티션 키나 표현식을 사용자가 명시하는데

키 파티션에서는 해시 값의 계산도 MySQL 서버가 수행한다

선정된 파티션 키의 값을 MD5() 함수를 이용해 해시 값을 계산하고, 이 값을 MOD 연산해서 데이터를 각 파티션에 분배한다


13.3.4.1 키 파티션의 생성

  1. PK가 있는 경우 자동으로 PK가 파티션 키로 사용됨
CREATE TABLE k1 (
    id INT NOT NULL,
    name VARCHAR(20),
    PRIMARY KEY (id)
)
# 괄호의 내용을 비워두면 자동으로 PK의 모든 칼럼이 파티션 키가 되고
# PK의 일부만 명시할 수도 있다
PARTITION BY KEY()
PARTITIONS 2;


  1. PK가 없는 경우 유니크 키(존재한다면)가 파티션 키로 사용됨
CREATE TABLE k1 (
    id INT NOT NULL,
    name VARCHAR(20),
    UNIQUE KEY (id)
)
# 괄호의 내용을 비워두면 자동으로 PK의 모든 칼럼이 파티션 키가 되고
# PK의 일부만 명시할 수도 있다
PARTITION BY KEY()
PARTITIONS 2;


  1. PK나 유니크 키의 칼럼 일부를 파티션 키로 명시적으로 설정
CREATE TABLE dept_emp (
    emp_no INT NOT NULL,
    dept_no CHAR(4) NOT NULL,
    ...
    PRIMARY KEY (dept_no, emp_no)
)
# 괄호의 내용에 PK나 유니크 키를 구성하는 칼럼 중에서
# 일부만 선택해서 파티션 키 지정 가능
PARTITION BY KEY(dept_no)
PARTITIONS 2;


PARTITION BY KEY 키워드로 키 파티션 정의 가능하고 이 키워드 뒤에 파티션 키 칼럼을 명시한다

세 번째 예제 쿼리와 같이 PK나 유니크 키를 구성하는 칼럼 중 일부만 파티션 키 명시하는 것도 가능

PARTITIONS 키워드로 파티션 개수 지정


13.3.4.2 키 파티션의 주의사항 및 특이사항

  1. 키 파티션은 MySQL 내부 적으로 MD5() 함수를 이용해 파티션하기 때문에 파티션 키가 정수 타입이 아니여도 된다
    • 해시 파티션으로 파티션이 어렵다면 키 파티션 고려
  2. PK나 유니크 키를 구성하는 칼럼 중 일부만으로 파티션할 수 있다
  3. 유니크 키를 파티션 키로 사용할 때 해당 유니크 키는 반드시 NOT NULL이어야 한다
  4. 해시 파티션에 비해 파티션 간의 레코드를 더 균등하게 분할할 수 있기 때문에 키 파티션이 더 효율적


MD5(Message-Digest algorithm 5)는 128비트 암호화 해시 함수

danbi5228 commented 1 year ago

13.3.5 리니어 해시 파티션 / 리니어 키 파티션

13.3.5.1 리니어 해시 파티션 / 리니어 키 파티션의 추가 및 통합

13.3.6 파티션 테이블의 쿼리 성능