Heim  >  Artikel  >  Datenbank  >  Die vier Partitionierungsmethoden von MySQL und die Implementierung der kombinierten Partitionierung

Die vier Partitionierungsmethoden von MySQL und die Implementierung der kombinierten Partitionierung

WBOY
WBOYnach vorne
2023-05-26 17:55:291697Durchsuche

1. Fragen

1. Was ist Partitionierung? Es dient dazu, die Daten einer Tabelle in Blöcken zu speichern.

Zweck: Die Abfrageeffizienz des Indexes zu verbessern

Beginnen Sie mit der Datenanalyse

Führen Sie dann eine Indexoptimierung durch

Führen Sie dann das Partitionierungsprinzip in MySQL ein

Client---------> Vergleichen Sie ID und Partitionsschlüssel------- ----- ->Suchen Sie die angegebene Partition---------->Sie stimmt mit der Datenbankabfrage überein

4. Partitionseinschränkungen in Mysql

Sie 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-Partition

Schritte

1. Erstellen Sie zuerst einen Product-Partiton-Hash

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

Die Hash-Partition kann nur nach numerischen Feldern und nicht nach Zeichenfeldern partitioniert werden. Wenn Sie die Feldwerte partitionieren müssen.

Muss im Primärschlüsselfeld enthalten sein.

3.Schlüsselpartition
  • Schritte

    1. Erstellen Sie zuerst einen Produktpartitionsschlüssel
  • 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 Mysql

Schritte

1. 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ügen

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

3.2 Neue HASH/KEY-Partition hinzufügen

ALERT TABLE users DROP PARTITION p0; 
#删除分区 p0

3.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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen