> 데이터 베이스 > MySQL 튜토리얼 > MySQL의 네 가지 파티셔닝 방법과 결합 파티셔닝을 구현하는 방법

MySQL의 네 가지 파티셔닝 방법과 결합 파티셔닝을 구현하는 방법

WBOY
풀어 주다: 2023-05-26 17:55:29
앞으로
1852명이 탐색했습니다.

1. 질문

1. 파티셔닝이란?

파티션: 테이블의 데이터를 블록에 저장하는 것입니다.

목적: 인덱스의 쿼리 효율성을 향상시킵니다.

데이터 분석부터 시작

인덱스 최적화 수행

파티션 도입

3. Mysql의 파티셔닝 원칙

Client---------> ----- ->지정된 파티션 찾기------------>데이터베이스 쿼리와 일치합니다

4. Mysql의 파티션 제한

파티션 필드를 사용해야 합니다. 그렇지 않으면 파티션 쿼리가 실패합니다. 모든 구역을 걸어보세요.

현재 Range는 범위 분할이지만 가끔 알아보겠습니다. 파티션 크기는 항상 정적입니다.

그래서 파티션 테이블의 크기가 고르지 않게 됩니다. 파티션 테이블 크기의 균형을 맞추는 방법은 무엇입니까?

2. 파티셔닝 구현

1. 범위 파티셔닝

Product-Partiton 테이블

  • Steps

  • 1. 그런 다음 파티션 테이블을 쿼리합니다.
CREATE TABLE `product-Partiton-Range` (
	`Id` BIGINT(8) NOT NULL,
	`ProductName` CHAR(245) NOT NULL DEFAULT '1',
	`ProductId` CHAR(255) NOT NULL DEFAULT '1',
	`ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
	`ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
	PRIMARY KEY (`Id`),
	INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY RANGE (Id) PARTITIONS 3 (
PARTITION part0 VALUES LESS THAN (12980), 
PARTITION part1 VALUES LESS THAN (25960), 
PARTITION part2 VALUES LESS THAN MAXVALUE);
로그인 후 복사

2. 해시 파티션

단계

1. 먼저 Product-Partiton-Hash

select * from product-Partiton-Range where Id = 25000
로그인 후 복사

해시 파티션을 생성하세요. 해시 파티션은 숫자 필드로만 파티션할 수 있으며 문자 필드로는 파티션할 수 없습니다. 필드 값을 분할해야 하는 경우.

기본 키 필드 내에 포함되어야 합니다.

3.Key Partition

Steps

1. 먼저 Product-Partiton-Key를 생성하세요

CREATE TABLE `product-Partiton-Hash` (
    `Id` BIGINT(8) NOT NULL,
    `ProductName` CHAR(245) NOT NULL DEFAULT '1',
    `ProductId` CHAR(255) NOT NULL DEFAULT '1',
    `ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
    `ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
    PRIMARY KEY (`Id`),
    INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY HASH (Id) PARTITIONS 3;
로그인 후 복사

위의 파티션에는 모두 하나의 기능이 있습니다. 모든 파티션은 연속적이고 연속적인 크기로 분할되어야 합니다.

다른 시나리오를 살펴보겠습니다. 제품 주문을 분할하는 방법입니다.

4. Mysql에서 리스트 파티션을 구현하는 방법

단계

1. 먼저 파티션할 Product-Partiton-List

CREATE TABLE `product-Partiton-Key` (
	`Id` BIGINT(8) NOT NULL,
	`ProductName` CHAR(245) NOT NULL DEFAULT '1',
	`ProductId` CHAR(255) NOT NULL DEFAULT '1',
	`ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
	`ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
	PRIMARY KEY (`Id`),
	INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY KEY (ProductName) PARTITIONS 3;

#建立复合主键
CREATE TABLE `product-Partiton-Key` (
	`Id` BIGINT(8) NOT NULL,
	`ProductName` CHAR(245) NOT NULL DEFAULT '1',
	`ProductId` CHAR(255) NOT NULL DEFAULT '1',
	`ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
	`ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
	PRIMARY KEY (`Id`),
	INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY KEY (ProductName) PARTITIONS 3;
로그인 후 복사

제품 기본 키와 제품 이름을 만듭니다.

5. Mysql에서 파티션을 결합하는 방법

Steps

CREATE TABLE `product-Partiton-List` (
    `Id` BIGINT(8) NOT NULL,
    `ProductName` CHAR(245) NOT NULL DEFAULT '1',
    `ProductId` CHAR(255) NOT NULL DEFAULT '1',
    `ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
    `ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
    `ProductStatus` int NOT NULL DEFAULT 0,
    PRIMARY KEY (`Id`),
    INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY LIST(ProductId) (
    PARTITION a VALUES IN (1,5,6),
    PARTITION b VALUES IN (2,7,8)
);
로그인 후 복사

3. Mysql에서 파티션을 관리하는 방법

1. 파티션 삭제

2.1RANGE 파티션 재구성

CREATE TABLE `product-Partiton-flex` (
    `Id` BIGINT(8) NOT NULL,
    `ProductName` CHAR(245) NOT NULL DEFAULT '1',
    `ProductId` CHAR(255) NOT NULL DEFAULT '1',
    `ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
    `ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
    PRIMARY KEY (`Id`,`ProductName`),
    INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY RANGE (Id) PARTITIONS 3
SUBPARTITION BY KEY(ProductName)
  SUBPARTITIONS 2 (
    PARTITION p0 VALUES LESS THAN (12980),
    PARTITION p1 VALUES LESS THAN (25960),
    PARTITION p2 VALUES LESS THAN MAXVALUE
);
로그인 후 복사

2.2 LIST 파티션 재구성

ALERT TABLE users DROP PARTITION p0; 
#删除分区 p0
로그인 후 복사

2.3 HASH/KEY 파티션 재구성

ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES LESS THAN (6000000));  
#将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。
로그인 후 복사

3. 새 파티션 추가

3.1 새 RANGE 파티션 추가
ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES IN(0,1,4,5,8,9,12,13));
#将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。
로그인 후 복사
3.2 새 HASH/KEY 파티션 추가
ALTER TABLE users REORGANIZE PARTITION COALESCE PARTITION 2; 
#用 REORGANIZE 方式重建分区的数量变成2,在这里数量只能减少不能增加。想要增加可以用 ADD PARTITION 方法。
로그인 후 복사
3.3 기존 테이블에 파티션 추가
#新增一个RANGE分区
ALTER TABLE category ADD PARTITION (PARTITION p4 VALUES IN (16,17,18,19)
            DATA DIRECTORY = '/data8/data'
            INDEX DIRECTORY = '/data9/idx');
로그인 후 복사

4.기본 파티션 제한 사항 파티션 필드는 기본 키(PRIMARY KEY)의 일부여야 합니다. 이 제한 사항을 제거하려면

[방법 1] ID:
ALTER TABLE users ADD PARTITION PARTITIONS 8;   #将分区总数扩展到8个。
로그인 후 복사
[방법 2]를 사용하여 원래 PK를 제거하고 새 PK
alter table results partition by RANGE (month(ttime)) 
(
PARTITION p0 VALUES LESS THAN (1),
PARTITION p1 VALUES LESS THAN (2) , 
PARTITION p2 VALUES LESS THAN (3) ,
PARTITION p3 VALUES LESS THAN (4) , 
PARTITION p4 VALUES LESS THAN (5) ,
PARTITION p5 VALUES LESS THAN (6) , 
PARTITION p6 VALUES LESS THAN (7) ,
PARTITION p7 VALUES LESS THAN (8) , 
PARTITION p8 VALUES LESS THAN (9) ,
PARTITION p9 VALUES LESS THAN (10) , 
PARTITION p10 VALUES LESS THAN (11),
PARTITION p11 VALUES LESS THAN (12),
PARTITION P12 VALUES LESS THAN (13) 
);
로그인 후 복사
를 생성하세요.

위 내용은 MySQL의 네 가지 파티셔닝 방법과 결합 파티셔닝을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿