Heim > Datenbank > MySQL-Tutorial > Hauptteil

Die vier Partitionierungsmethoden von MySQL und die Implementierung der kombinierten Partitionierung

WBOY
Freigeben: 2023-05-26 17:55:29
nach vorne
1808 Leute haben es durchsucht

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);
Nach dem Login kopieren

2. Hash-Partition

Schritte

1. Erstellen Sie zuerst einen Product-Partiton-Hash

select * from product-Partiton-Range where Id = 25000
Nach dem Login kopieren

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;
    Nach dem Login kopieren
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;
Nach dem Login kopieren

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)
);
Nach dem Login kopieren

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
);
Nach dem Login kopieren

3.2 Neue HASH/KEY-Partition hinzufügen

ALERT TABLE users DROP PARTITION p0; 
#删除分区 p0
Nach dem Login kopieren

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 分区中。
Nach dem Login kopieren

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 分区中。
Nach dem Login kopieren

[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 方法。
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage