Heim >Datenbank >MySQL-Tutorial >Die vier Partitionierungsmethoden von MySQL und die Implementierung der kombinierten Partitionierung
Zweck: Die Abfrageeffizienz des Indexes zu verbessern
Beginnen Sie mit der Datenanalyse Führen Sie dann eine Indexoptimierung durchFühren Sie dann das Partitionierungsprinzip in MySQL einClient---------> Vergleichen Sie ID und Partitionsschlüssel------- ----- ->Suchen Sie die angegebene Partition---------->Sie stimmt mit der Datenbankabfrage überein4. Partitionseinschränkungen in MysqlSie müssen das Partitionsfeld verwenden, andernfalls Die Partitionsabfrage schlägt fehl. Gehen Sie alle Zonen. Derzeit ist Range eine Bereichspartition, aber manchmal werden wir es herausfinden. Die Partitionsgröße ist immer statisch. Es wird also eine ungleichmäßige Größe der Partitionstabelle geben. Wie gleicht man die Größe der Partitionstabelle aus? 2.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. Hash-PartitionSchritte1. Erstellen Sie zuerst einen Product-Partiton-Hash
select * from product-Partiton-Range where Id = 25000
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;Die oben genannten Partitionen haben alle eine Funktion: Alle Partitionen müssen kontinuierlich und in kontinuierlichen Größen partitioniert werden. Sehen wir uns ein anderes Szenario an: die Partitionierung von Produktbestellungen. 4. So implementieren Sie die Listenpartition in MysqlSchritte1. Erstellen Sie zunächst den Produkt-Primärschlüssel und den Produktnamen für die Partition. 5. So kombinieren Sie Partitionen in MySQL Rekonstruktion der IST-Partition
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.3 HASH/KEY-Partitionsrekonstruktion
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. Neue Partition hinzufügen3.1 Neue RANGE-Partition hinzufügen
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; #删除分区 p03.3 Partition zur vorhandenen Tabelle hinzufügen
ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES LESS THAN (6000000)); #将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。4.Standardpartition Einschränkungen Das Partitionsfeld muss Teil des Primärschlüssels (PRIMÄRSCHLÜSSEL) sein[Methode 1] verwenden Sie ID:
ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES IN(0,1,4,5,8,9,12,13)); #将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。[Methode 2] Entfernen Sie den ursprünglichen PK und generieren Sie einen neuen PK
ALTER TABLE users REORGANIZE PARTITION COALESCE PARTITION 2; #用 REORGANIZE 方式重建分区的数量变成2,在这里数量只能减少不能增加。想要增加可以用 ADD PARTITION 方法。
Das obige ist der detaillierte Inhalt vonDie vier Partitionierungsmethoden von MySQL und die Implementierung der kombinierten Partitionierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!