Heim Datenbank MySQL-Tutorial Kann die Partitionierung von Datenbanktabellen die Einfügeeffizienz verbessern?

Kann die Partitionierung von Datenbanktabellen die Einfügeeffizienz verbessern?

Jul 22, 2020 am 11:52 AM
分区 数据库

Die Partitionierung von Datenbanktabellen kann die Einfügungseffizienz verbessern; die Partitionierung von Datenbanktabellen kann die Effizienz von Tabellenhinzufügungen, -löschungen, -änderungen und -abfragen verbessern. Das Prinzip des Einfügungsvorgangs für Datenbanktabellenpartitionen: Beim Schreiben eines Datensatzes öffnet und sperrt die Partitionsschicht alle zugrunde liegenden Tabellen, bestimmt dann, welche Partition den Datensatz akzeptiert, und schreibt den Datensatz dann in die entsprechende zugrunde liegende Tabelle.

Kann die Partitionierung von Datenbanktabellen die Einfügeeffizienz verbessern?

Was ist eine Partition?

Partitionierung bedeutet, die Tabelle nach Regeln zu zerlegen und die Daten in Segmente aufzuteilen, um sie an mehreren Orten zu speichern, entweder auf derselben Festplatte oder auf verschiedenen Maschinen. Nach der Partitionierung befindet sich immer noch eine Tabelle auf der Oberfläche, die Daten werden jedoch an mehrere Speicherorte gehasht. Wenn die App liest und schreibt, verarbeitet sie weiterhin den großen Tabellennamen und die Datenbank organisiert automatisch die partitionierten Daten.

Partitionen können in zwei Typen unterteilt werden:

1. Horizontale Partitionierung (horizontale Partitionierung)

Diese Form der Partitionierung dient der Partitionierung der Tabellenzeilen. Auf diese Weise können die durch physische Spalten in verschiedenen Gruppen getrennten Datensätze kombiniert werden, um eine individuelle Partitionierung (einzelne Partition) oder eine kollektive Partitionierung (eine oder mehrere Partitionen) durchzuführen. . Alle in der Tabelle definierten Spalten sind in jedem Datensatz enthalten,

sodass die Eigenschaften der Tabelle weiterhin erhalten bleiben.

Ein einfaches Beispiel: Eine Tabelle mit Rechnungsdatensätzen für zehn Jahre kann in zehn verschiedene Partitionen unterteilt werden, wobei jede Partition Datensätze für eines der Jahre enthält. (Hinweis: Wir werden später über die hier verwendete spezifische Partitionierungsmethode sprechen. Wir können zunächst eines sagen: Sie muss durch eine bestimmte Attributspalte geteilt werden. Die hier verwendete Spalte ist beispielsweise das Jahr.)

2. Vertikale Partitionierung (Vertikale Partitionierung)

Diese Partitionierungsmethode reduziert im Allgemeinen die Breite der Zieltabelle, indem sie die Tabelle vertikal teilt, sodass bestimmte Spalten in bestimmte Partitionen unterteilt werden und jede Partition enthält die Zeilen entsprechen den Spalten.

Nehmen Sie ein einfaches Beispiel: Eine Tabelle enthält große Text- und BLOB-Spalten, auf die nicht häufig zugegriffen wird. Diese selten verwendeten Text- und BLOB-Spalten müssen in eine andere Partition unterteilt werden Zugriffsgeschwindigkeit und stellen gleichzeitig die Korrelation ihrer Daten sicher.

Prinzip der Partitionstabelle

Die Partitionstabelle wird durch mehrere verwandte zugrunde liegende Tabellen implementiert. Diese zugrunde liegenden Tabellen werden auch durch Handle-Objekte dargestellt Sie können die zugrunde liegenden Tabellen der Partition auch direkt auf die gleiche Weise verwalten wie normale Tabellen (alle zugrunde liegenden Tabellen müssen dieselbe Speicher-Engine verwenden). Der Index der Partitionstabelle dient lediglich zum Hinzufügen eines identischen Index zu jeder zugrunde liegenden Tabelle Aus Sicht der Speicher-Engine unterscheidet sich die zugrunde liegende Tabelle nicht von einer gewöhnlichen Tabelle, und die Speicher-Engine muss nicht wissen, ob es sich um eine gewöhnliche Tabelle oder um einen Teil einer partitionierten Tabelle handelt.

Die Operation an der Partitionstabelle wird gemäß der folgenden Operationslogik ausgeführt:

Abfrage auswählen:

Beim Abfragen einer Partitionstabelle wird zuerst die Partitionsschicht geöffnet und gesperrt alle In der zugrunde liegenden Tabelle bestimmt der Optimierer, ob einige Partitionen gefiltert werden können, und ruft dann die entsprechende Speicher-Engine-Schnittstelle auf, um auf die Daten jeder Partition zuzugreifen

Einfügevorgang:

Beim Schreiben eines Datensatzes die Partitionsschicht Öffnen und sperren Sie alle zugrunde liegenden Tabellen, bestimmen Sie dann, welche Partition diesen Datensatz akzeptiert, und schreiben Sie den Datensatz dann in die entsprechende zugrunde liegende Tabelle

Löschvorgang:

Wenn ein Datensatz gelöscht wird, wird der Partitionsschicht Öffnen und sperren Sie zuerst alle zugrunde liegenden Tabellen, bestimmen Sie dann die den Daten entsprechende Partition und löschen Sie schließlich die entsprechende zugrunde liegende Tabelle.

Aktualisierungsvorgang:

Beim Aktualisieren eines Datenelements wird die Partition aktualisiert Die Ebene wird zuerst geöffnet und sperrt alle zugrunde liegenden Tabellen. MySQL bestimmt zunächst, in welcher Partition sich der zu aktualisierende Datensatz befindet, entnimmt dann die Daten und aktualisiert sie, bestimmt dann, in welche Partition die aktualisierten Daten abgelegt werden sollen, und schreibt dann die zugrunde liegende Tabelle und aktualisiert die Originaldaten.

Obwohl jeder Vorgang alle zugrunde liegenden Tabellen öffnet und sperrt, bedeutet dies nicht, dass die Partitionstabelle während der Verarbeitung die gesamte Tabelle sperrt. Wenn die Speicher-Engine Sperren auf Zeilenebene implementieren kann, wie z. B. Innodb, wird die entsprechende Tabellensperre auf Partitionsebene freigegeben. Dieser Sperr- und Entsperrvorgang ähnelt Abfragen bei gewöhnlichem Innodb.

Im folgenden Szenario kann die Aufteilung eine sehr große Rolle spielen:

A: Der Tisch ist zu groß, um alle unterzubringen. Es ist heiß Daten im Speicher oder nur im letzten Teil der Tabelle, und der Rest sind historische Daten

B: Die Daten in der Partitionstabelle sind einfacher zu verwalten, wenn Sie beispielsweise eine große Menge löschen möchten Wenn Sie Daten in Stapeln speichern möchten, können Sie die Methode zum Löschen der gesamten Partition verwenden. Darüber hinaus können Sie auch Optimierungen, Überprüfungen, Reparaturen und andere Vorgänge auf einer unabhängigen Partition durchführen

C: Die Daten der Partitionstabelle können auf verschiedene physische Geräte verteilt werden, wodurch mehrere Hardwaregeräte effizient genutzt werden

D: Sie können Partitionstabellen verwenden, um einige besondere Engpässe zu vermeiden, wie zum Beispiel: sich gegenseitig ausschließender Zugriff auf einen einzelnen Index in innodb, Inode-Sperrkonkurrenz im ext3-Dateisystem usw.

E: Bei Bedarf können Sie kann auch unabhängige Partitionen sichern und wiederherstellen, was in Szenarien mit sehr großen Datenmengen sehr gut funktioniert

F: Optimieren Sie die Abfrage. Wenn die Partitionsspalte in der where-Klausel enthalten ist, können Sie nur die erforderlichen Partitionen verwenden, um die Abfrageeffizienz zu verbessern. Gleichzeitig können Abfragen mit Aggregatfunktionen wie sum() und count( ), können Sie jede hinzufügen. Die Partitionen werden parallel verarbeitet, und am Ende müssen nur die Ergebnisse aller Partitionen zusammengefasst werden.

Die Partition der MySQL-Datenbank behandelt Null immer als einen kleineren Wert als jeden Nicht-Null-Wert. Dies entspricht der Reihenfolge nach Operation in der Datenbank, die Nullwerte verarbeitet steht immer im Vordergrund. Daher behandelt die MySQL-Datenbank für verschiedene Partitionstypen unterschiedlich.

Wenn bei der Bereichspartitionierung null in die Partitionsspalte eingefügt wird, fügt die MySQL-Datenbank den Wert in die Partition ganz links ein. Beachten Sie, dass beim Löschen der Partition der gesamte Inhalt unter der Partition von der Festplatte gelöscht wird . wird die Partition gelöscht, in der sich null befindet, und der Nullwert wird ebenfalls gelöscht.

Um Null in der Listenpartition zu verwenden, muss es explizit im Hashwert der Partition definiert werden, andernfalls wird beim Einfügen von Null ein Fehler gemeldet. Hash- und Schlüsselpartitionen behandeln Null anders als Bereichs- und Listenpartitionen. Jede Partitionsfunktion gibt Null als 0 zurück.

Partition

Partitionierung erfolgt Teilen Sie die Datenbank oder ihre Bestandteile in verschiedene unabhängige Teile auf

--Es handelt sich um eine Methode zur Vororganisation der Tabellenspeicherung

MySQL unterstützt horizontale Partitionierung

Verteilen Sie bestimmte Tabellenzeilen als Teilmengen von Zeilen

Die Verteilung der Partitionen erfolgt über den physischen Speicher

– wie vom Benutzer bei Bedarf festgelegt. Spezifikationsregeln für

– Jede Partition wird als eigene Einheit gespeichert

Aufteilung der Daten

– Daten werden in Teilmengen unterteilt

– Partitionstyp und -ausdruck sind Teil der Tabellendefinition

– Ausdruck kann eine Ganzzahl oder eine Funktion sein, die einen ganzzahligen Wert zurückgibt.

--Dieser Wert bestimmt, in welcher Partition jeder Datensatz gemäß der Definition gespeichert wird

1 Der Primärschlüssel und der eindeutige Schlüssel müssen als Teil des Partitionsschlüssels enthalten sein, andernfalls der Primärschlüssel Schlüssel und eindeutiger Schlüssel werden erstellt. „ERROR 1503 (HY000)“ wird beim Indizieren gemeldet

2. Wenn Sie eine Partition zu einer Bereichspartition hinzufügen, können Sie die Partition erst nach dem Maximalwert anhängen

3. Die Engine aller Partitionen muss gleich sein

4. Bereichspartitionierungsfelder: Ganzzahl, numerischer Ausdruck, Datumsspalte, Datumsfunktionsausdruck (z. B. Jahr(), to_days(), to_seconds( ), unix_timestamp())

Partitionsverwaltung

Partition hinzufügen

ALTER TABLE sale_data
ADD PARTITION (PARTITION p201010 VALUES LESS THAN (201011));
Nach dem Login kopieren

Partition löschen

–Wenn eine Partition gelöscht wird, werden auch alle Daten in der Partition gelöscht.

ALTER TABLE sale_data DROP PARTITION p201010;
Nach dem Login kopieren

Partitionen zusammenführen

Das folgende SQL führt p201001 – p201009 in 3 Partitionen p2010Q1 – p2010Q3 zusammen

ALTER TABLE sale_data
REORGANIZE PARTITION p201001,p201002,p201003,
p201004,p201005,p201006,
p201007,p201008,p201009 INTO
(
PARTITION p2010Q1 VALUES LESS THAN (201004),
PARTITION p2010Q2 VALUES LESS THAN (201007),
PARTITION p2010Q3 VALUES LESS THAN (201010)
);
Nach dem Login kopieren

Verwandte Empfehlungen: " PHP Tutorial》, „MySQL-Tutorial

Das obige ist der detaillierte Inhalt vonKann die Partitionierung von Datenbanktabellen die Einfügeeffizienz verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie implementiert die Go-Sprache die Hinzufügungs-, Lösch-, Änderungs- und Abfragevorgänge der Datenbank? Wie implementiert die Go-Sprache die Hinzufügungs-, Lösch-, Änderungs- und Abfragevorgänge der Datenbank? Mar 27, 2024 pm 09:39 PM

Die Go-Sprache ist eine effiziente, prägnante und leicht zu erlernende Programmiersprache. Sie wird von Entwicklern aufgrund ihrer Vorteile bei der gleichzeitigen Programmierung und Netzwerkprogrammierung bevorzugt. In der tatsächlichen Entwicklung sind Datenbankoperationen ein unverzichtbarer Bestandteil. In diesem Artikel wird erläutert, wie die Go-Sprache zum Implementieren von Datenbank-Hinzufügungs-, Lösch-, Änderungs- und Abfrageoperationen verwendet wird. In der Go-Sprache verwenden wir normalerweise Bibliotheken von Drittanbietern, um Datenbanken zu betreiben, z. B. häufig verwendete SQL-Pakete, Gorm usw. Hier nehmen wir das SQL-Paket als Beispiel, um vorzustellen, wie die Hinzufügungs-, Lösch-, Änderungs- und Abfragevorgänge der Datenbank implementiert werden. Angenommen, wir verwenden eine MySQL-Datenbank.

iOS 18 fügt eine neue Albumfunktion „Wiederhergestellt' hinzu, um verlorene oder beschädigte Fotos wiederherzustellen iOS 18 fügt eine neue Albumfunktion „Wiederhergestellt' hinzu, um verlorene oder beschädigte Fotos wiederherzustellen Jul 18, 2024 am 05:48 AM

Apples neueste Versionen der iOS18-, iPadOS18- und macOS Sequoia-Systeme haben der Fotoanwendung eine wichtige Funktion hinzugefügt, die Benutzern dabei helfen soll, aus verschiedenen Gründen verlorene oder beschädigte Fotos und Videos einfach wiederherzustellen. Mit der neuen Funktion wird im Abschnitt „Extras“ der Fotos-App ein Album mit dem Namen „Wiederhergestellt“ eingeführt, das automatisch angezeigt wird, wenn ein Benutzer Bilder oder Videos auf seinem Gerät hat, die nicht Teil seiner Fotobibliothek sind. Das Aufkommen des Albums „Wiederhergestellt“ bietet eine Lösung für Fotos und Videos, die aufgrund einer Datenbankbeschädigung verloren gehen, die Kameraanwendung nicht korrekt in der Fotobibliothek speichert oder eine Drittanbieteranwendung die Fotobibliothek verwaltet. Benutzer benötigen nur wenige einfache Schritte

Wie implementiert Hibernate polymorphe Zuordnung? Wie implementiert Hibernate polymorphe Zuordnung? Apr 17, 2024 pm 12:09 PM

Die polymorphe Hibernate-Zuordnung kann geerbte Klassen der Datenbank zuordnen und bietet die folgenden Zuordnungstypen: Joined-Subclass: Erstellen Sie eine separate Tabelle für die Unterklasse, einschließlich aller Spalten der übergeordneten Klasse. Tabelle pro Klasse: Erstellen Sie eine separate Tabelle für Unterklassen, die nur unterklassenspezifische Spalten enthält. Union-Unterklasse: ähnelt der verbundenen Unterklasse, aber die Tabelle der übergeordneten Klasse vereint alle Spalten der Unterklasse.

Ausführliches Tutorial zum Herstellen einer Datenbankverbindung mit MySQLi in PHP Ausführliches Tutorial zum Herstellen einer Datenbankverbindung mit MySQLi in PHP Jun 04, 2024 pm 01:42 PM

So verwenden Sie MySQLi zum Herstellen einer Datenbankverbindung in PHP: MySQLi-Erweiterung einbinden (require_once) Verbindungsfunktion erstellen (functionconnect_to_db) Verbindungsfunktion aufrufen ($conn=connect_to_db()) Abfrage ausführen ($result=$conn->query()) Schließen Verbindung ( $conn->close())

Eine ausführliche Analyse, wie HTML die Datenbank liest Eine ausführliche Analyse, wie HTML die Datenbank liest Apr 09, 2024 pm 12:36 PM

HTML kann die Datenbank nicht direkt lesen, dies kann jedoch über JavaScript und AJAX erreicht werden. Zu den Schritten gehören das Herstellen einer Datenbankverbindung, das Senden einer Abfrage, das Verarbeiten der Antwort und das Aktualisieren der Seite. Dieser Artikel bietet ein praktisches Beispiel für die Verwendung von JavaScript, AJAX und PHP zum Lesen von Daten aus einer MySQL-Datenbank und zeigt, wie Abfrageergebnisse dynamisch auf einer HTML-Seite angezeigt werden. In diesem Beispiel wird XMLHttpRequest verwendet, um eine Datenbankverbindung herzustellen, eine Abfrage zu senden und die Antwort zu verarbeiten. Dadurch werden Daten in Seitenelemente gefüllt und die Funktion des HTML-Lesens der Datenbank realisiert.

Umgang mit Datenbankverbindungsfehlern in PHP Umgang mit Datenbankverbindungsfehlern in PHP Jun 05, 2024 pm 02:16 PM

Um Datenbankverbindungsfehler in PHP zu behandeln, können Sie die folgenden Schritte ausführen: Verwenden Sie mysqli_connect_errno(), um den Fehlercode abzurufen. Verwenden Sie mysqli_connect_error(), um die Fehlermeldung abzurufen. Durch die Erfassung und Protokollierung dieser Fehlermeldungen können Datenbankverbindungsprobleme leicht identifiziert und behoben werden, wodurch der reibungslose Betrieb Ihrer Anwendung gewährleistet wird.

Tipps und Praktiken zum Umgang mit verstümmelten chinesischen Zeichen in Datenbanken mit PHP Tipps und Praktiken zum Umgang mit verstümmelten chinesischen Zeichen in Datenbanken mit PHP Mar 27, 2024 pm 05:21 PM

PHP ist eine Back-End-Programmiersprache, die in der Website-Entwicklung weit verbreitet ist. Sie verfügt über leistungsstarke Datenbankbetriebsfunktionen und wird häufig zur Interaktion mit Datenbanken wie MySQL verwendet. Aufgrund der Komplexität der Kodierung chinesischer Zeichen treten jedoch häufig Probleme beim Umgang mit verstümmelten chinesischen Zeichen in der Datenbank auf. In diesem Artikel werden die Fähigkeiten und Praktiken von PHP beim Umgang mit chinesischen verstümmelten Zeichen in Datenbanken vorgestellt, einschließlich häufiger Ursachen für verstümmelte Zeichen, Lösungen und spezifischer Codebeispiele. Häufige Gründe für verstümmelte Zeichen sind falsche Einstellungen für den Datenbank-Zeichensatz: Beim Erstellen der Datenbank muss der richtige Zeichensatz ausgewählt werden, z. B. utf8 oder u

Wie verwende ich Datenbank-Callback-Funktionen in Golang? Wie verwende ich Datenbank-Callback-Funktionen in Golang? Jun 03, 2024 pm 02:20 PM

Durch die Verwendung der Datenbank-Rückruffunktion in Golang kann Folgendes erreicht werden: Ausführen von benutzerdefiniertem Code, nachdem der angegebene Datenbankvorgang abgeschlossen ist. Fügen Sie benutzerdefiniertes Verhalten durch separate Funktionen hinzu, ohne zusätzlichen Code zu schreiben. Rückruffunktionen stehen für Einfüge-, Aktualisierungs-, Lösch- und Abfragevorgänge zur Verfügung. Sie müssen die Funktion sql.Exec, sql.QueryRow oder sql.Query verwenden, um die Rückruffunktion verwenden zu können.

See all articles