Die Optimierung großer Datenbankdatenmengen ist eine umfassende Wissenschaft und zudem eine professionelle Fähigkeit, die ein Entwickler beherrschen muss. Die MySQL-Tabellenpartitionierung kann in vertikale und horizontale Partitionierung unterteilt werden. Beide Partitionierungsformen sind relativ einfach. Einfach ausgedrückt bedeutet vertikale Partitionierung, dass die Tabelle nicht viele Datensätze enthält, die Felder jedoch sehr lang sind, die Tabelle viel Platz einnimmt und beim Abrufen der Tabelle eine große Menge an IO ausgeführt werden muss, was die Leistung erheblich beeinträchtigt. Zu diesem Zeitpunkt müssen Sie die großen Felder in eine andere Tabelle aufteilen, und diese Tabelle hat eine Eins-zu-eins-Beziehung zur ursprünglichen Tabelle. Bei der horizontalen Tabellenpartitionierung werden die Daten derselben Tabelle nach bestimmten Regeln in mehrere Tabellen innerhalb derselben Datenbank aufgeteilt. Der Zweck besteht darin, die Leistungsprobleme zu optimieren, die durch zu viele Daten in einer einzelnen Tabelle verursacht werden, IO-Konflikte zu vermeiden und die Wahrscheinlichkeit einer Tabellensperre zu verringern. Es ist einfach, Tabellen-Sharding zu implementieren. Der komplizierte Teil besteht jedoch darin, die Daten nach dem Sharding abzufragen. Die heutige Implementierung besteht in der Verwendung der Mysql-Tabellen-Engine MRG_MyISAM (MERGE). Wenn Sie eine MERGE-Tabelle erstellen, erstellt MySQL zwei Dateien auf der Festplatte. Der Dateiname beginnt mit dem Namen der Tabelle und hat eine Erweiterung, die den Dateityp angibt. Eine .frm-Datei speichert die Tabellendefinition und eine .MRG-Datei enthält den Namen der zu verwendenden Tabelle. Diese Tabellen müssen sich nicht in derselben Datenbank wie die MERGE-Tabelle selbst befinden. Sie können SELECT, DELETE, UPDATE und INSERT auf Tabellensammlungen anwenden. Sie müssen über die Berechtigungen „SELECT“, „UPDATE“ und „DELETE“ für die Tabellen verfügen, die Sie einer MERGE-Tabelle zuordnen. Wenn Sie eine MERGE-Tabelle löschen, entfernen Sie nur die MERGE-Spezifikation. Die zugrunde liegende Tabelle ist davon nicht betroffen. Wenn Sie eine MERGE-Tabelle erstellen, müssen Sie eine UNION=(Liste der Tabellen)-Klausel angeben, die angibt, welche Tabellen Sie als eine Tabelle verwenden möchten. Wenn Einfügungen in die MERGE-Tabelle in der ersten oder letzten Tabelle in der UNION-Liste erfolgen sollen, können Sie optional eine INSERT_METHOD-Option angeben. Verwenden Sie den Wert FIRST oder LAST, um die Einfügung in der ersten bzw. letzten Tabelle vorzunehmen. Wenn Sie die Option INSERT_METHOD nicht angeben oder diese Option mit dem Wert NO angeben. Beim Versuch, einen Datensatz in eine MERGE-Tabelle einzufügen, tritt ein Fehler auf. Zum Beispiel: TABELLE ERSTELLEN `yzm_table1` ( `id` int(10) unsigned NICHT NULL, `title` varchar(100) NICHT NULL STANDARD '', `content` varchar(255) NICHT NULL STANDARD '', PRIMÄRSCHLÜSSEL (`id`) )ENGINE=MyISAM STANDARD-CHARSET=utf8; TABELLE `yzm_table2` erstellen ( `id` int(10) unsigned NICHT NULL, `title` varchar(100) NICHT NULL STANDARD '', `content` varchar(255) NICHT NULL STANDARD '', PRIMÄRSCHLÜSSEL (`id`) )ENGINE=MyISAM STANDARD-CHARSET=utf8; Die Tabelle wurde erstellt. Es ist zu beachten, dass die ID hier nicht auf automatische Inkrementierung eingestellt werden kann und alle Tabellenstrukturen konsistent sein müssen, einschließlich Struktur, Typ, Länge und Reihenfolge der Felder. Wie erhält man also diese ID? Ich werde dies später ausführlich erklären. Nun benötigen wir eine zusammengeführte Tabelle für die Abfrage. Der Code zum Erstellen der zusammengeführten Tabelle lautet wie folgt: TABELLE `yzm_table` erstellen ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(100) NICHT NULL STANDARD '', `content` varchar(255) NICHT NULL STANDARD '', PRIMÄRSCHLÜSSEL (`id`) ) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=NO INSERT_METHOD=LAST UNION=(`yzm_table1`,`yzm_table2`); Die zusammengeführte Tabelle muss außerdem dieselbe Struktur, denselben Typ, dieselbe Länge und dieselbe Reihenfolge der Felder wie die vorherige Tabelle haben. INSERT_METHOD=NO bedeutet hier, dass Einfügevorgänge für diese Tabelle nicht zulässig sind. Wenn wir eine Abfrage durchführen müssen, können wir nur mit der Tabelle yzm_table arbeiten, was bedeutet, dass diese Tabelle nur Auswahlvorgänge ausführen kann. Fügen Sie einige Datentests ein: INSERT INTO `yzm_table1` VALUES ('1', 'Tabelle1-1', 'Inhalt1-1'); INSERT INTO `yzm_table1` VALUES ('2', 'Tabelle1-2', 'Inhalt1-2'); INSERT INTO `yzm_table2` VALUES ('3', 'table2-1', 'content2-1'); INSERT INTO `yzm_table2` VALUES ('4', 'table2-2', 'content2-2'); INSERT INTO `yzm_table2` VALUES ('5', 'table2-3', 'content2-3'); Dann fragen Sie die zusammengeführte Tabelle (Haupttabelle) ab. Wählen Sie * aus `yzm_table` LIMIT 10; Natürlich können alle Daten aller zugehörigen Untertabellen abgefragt werden, sodass alle Daten per Paginierung, Statistik usw. abgefragt werden können. Oben sind die Einzelheiten des Beispiels für die Verwendung von MRG_MyISAM (MERGE) zur Implementierung von Abfragen nach Sharding in MySQL aufgeführt. Weitere Informationen zu Abfragen nach Sharding in MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Installieren des Ping-Tools in einem von Docker erstellten Container
>>: Detaillierte Erläuterung zur Verwendung der WeChat-Miniprogrammkarte
Ich weiß nicht, ob Sie bemerkt haben, dass beim Ö...
Die Front-End- und Back-End-Projekte sind getrenn...
Der spezifische Code lautet wie folgt: <!DOCTY...
1. Nginx-Dienstgrundlage Nginx (Engine x) wurde s...
Inhaltsverzeichnis Einrichten einer einfachen HTT...
In diesem Artikelbeispiel erfahren Sie den spezif...
Vorwort Um die Konsistenz und Integrität der Date...
Ich bin vor kurzem auf ein Problem gestoßen. Die ...
Vorwort Wir wissen bereits, dass MySQL den SQL-Be...
In Unternehmen hat die hohe Verfügbarkeit von Dat...
Überblick Binlog2sql ist ein Open-Source-MySQL-Bi...
Inhaltsverzeichnis 1. Objektliterale 2. Das neue ...
Inhaltsverzeichnis Vorwort Überprüfen und deinsta...
Hintergrund Als ich heute mit anderen Projektteam...
Inhaltsverzeichnis 1. Testumgebung 1.1 CentOS 7 i...