Rumah  >  Artikel  >  pangkalan data  >  Mysql empat kaedah pembahagian dan cara melaksanakan pembahagian gabungan

Mysql empat kaedah pembahagian dan cara melaksanakan pembahagian gabungan

WBOY
WBOYke hadapan
2023-05-26 17:55:291806semak imbas

1. Soalan

1. Apakah pembahagian

Pembahagian: Ia adalah untuk menyimpan data jadual dalam blok

Tujuan: untuk meningkatkan kecekapan pertanyaan bagi indeks

2. Mengapakah Mysql menggunakan pembahagian

Mulakan dengan analisis data

dan kemudian lakukan pengoptimuman indeks

dan kemudian memperkenalkan pembahagian

3. Pembahagian dalam Prinsip Mysql

Pelanggan---------> Bandingkan Id dan kekunci partition------------->Cari partition ditentukan------ ---->Sama seperti pertanyaan pangkalan data

4. Had partition dalam Mysql

Anda mesti menggunakan medan partition, jika tidak pertanyaan partition akan gagal. Berjalan di semua zon.

Pada masa ini Julat ialah partition julat, tetapi kadangkala kita akan mengetahuinya. Saiz partition sentiasa statik.

Jadi akan ada saiz jadual partition yang tidak sekata. Bagaimana untuk mengimbangi saiz jadual partition?

2. Pelaksanaan pembahagian

1. Pembahagian julat

Syarat

  • Jadual Pembahagian Produk

Langkah-langkah

1. . Jika anda perlu membahagikan nilai medan.

mesti terkandung dalam medan kunci utama.

3.Key Partition

Langkah

1 Mula-mula buat Product-Partiton-Key

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);

Separti di atas mempunyai satu ciri: semua partition mesti Bersebelahan. dan pembahagian saiz bersebelahan.

Mari kita lihat senario lain: cara membahagikan pesanan produk.

4. Bagaimana untuk melaksanakan pembahagian Senarai dalam Mysql

Langkah

1 Mula-mula buat Product-Partiton-List

select * from product-Partiton-Range where Id = 25000

kunci utama produk dan nama produk. untuk pembahagian.

5. Bagaimana untuk menggabungkan partition dalam Mysql

Langkah

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;

3 Cara menguruskan partition dalam Mysql

1

2. Bina semula partition

2.1 Julat partition bina semula

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;

2.2 SENARAI partition bina semula

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)
);

2.3 HASH/KEY partition bina semula

rree

3. Partition Baharu

3.1 Tambah partition RANGE

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
);

3.2 Tambah partition HASH/KEY
ALERT TABLE users DROP PARTITION p0; 
#删除分区 p0
3.3 Tambah partition pada jadual sedia ada
rreee
4 .Partition lalai sekatan ialah medan partition mestilah sebahagian daripada kunci utama (KUNCI UTAMA Untuk mengalih keluar sekatan ini
[Kaedah 1] Gunakan ID:

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

[Kaedah 2] Alih keluar PK asal). dan menjana PK yang baharu
ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES IN(0,1,4,5,8,9,12,13));
#将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。

Atas ialah kandungan terperinci Mysql empat kaedah pembahagian dan cara melaksanakan pembahagian gabungan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam