Rumah > Artikel > pangkalan data > Mysql empat kaedah pembahagian dan cara melaksanakan pembahagian gabungan
Pembahagian: Ia adalah untuk menyimpan data jadual dalam blok
Tujuan: untuk meningkatkan kecekapan pertanyaan bagi indeks
Mulakan dengan analisis data
dan kemudian lakukan pengoptimuman indeks
dan kemudian memperkenalkan pembahagian
Pelanggan---------> Bandingkan Id dan kekunci partition------------->Cari partition ditentukan------ ---->Sama seperti pertanyaan pangkalan data
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?
Syarat
Jadual Pembahagian Produk
Langkah-langkah
1. . Jika anda perlu membahagikan nilai medan.
mesti terkandung dalam medan kunci utama.
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.
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
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 partition2.1 Julat partition bina semulaCREATE 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;
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
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 );
ALERT TABLE users DROP PARTITION p0; #删除分区 p0
ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES LESS THAN (6000000)); #将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。
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!