Detaillierte Erläuterung der MERGE-Speicher-Engine von MySQL

Detaillierte Erläuterung der MERGE-Speicher-Engine von MySQL

Die MERGE-Speicher-Engine behandelt eine Gruppe von MyISAM-Tabellen als logische Einheit, sodass wir sie gleichzeitig abfragen können. Jedes Mitglied der MyISAM-Datentabelle, das eine MERGE-Datentabellenstruktur bildet, muss genau dieselbe Tabellenstruktur haben. Die Spalten jeder Mitgliedstabelle müssen mit demselben Namen und Typ in derselben Reihenfolge definiert werden, und die Indizes müssen ebenfalls in derselben Reihenfolge und auf dieselbe Weise definiert werden. Angenommen, Sie haben mehrere Protokolldatentabellen, von denen jede Protokolleinträge für jedes Jahr der letzten Jahre enthält. Ihre Definitionen lauten wie folgt, wobei YY das Jahr darstellt.

CREATE TABLE log_YY ( 
  dt DATETIME NICHT NULL, 
  info VARCHAR(100) NICHT NULL, 
  INDEX (dt) 
)ENGINE = MyISAM;

Angenommen, der aktuelle Satz von Protokolldatentabellen umfasst log_2004, log_2005, log_2006 und log_2007. Sie können eine MERGE-Datentabelle wie unten gezeigt erstellen, um sie zu einer logischen Einheit zu gruppieren:

Tabelle erstellen log_merge ( 
  dt DATETIME NICHT NULL, 
  info VARCHAR(100) NICHT NULL, 
  INDEX(dt) 
) ENGINE = MERGE UNION = (log_2004, log_2005, log_2006, log_2007);

Der Wert der ENGINE-Option muss MERGE sein, und die Option UNION listet die zugehörigen Tabellen auf, die in diese MERGE-Tabelle aufgenommen werden. Sobald dieser MERGE erstellt ist, können Sie ihn wie jede andere Datentabelle abfragen, mit der Ausnahme, dass jede Abfrage gleichzeitig auf alle darin enthaltenen Mitgliedsdatentabellen angewendet wird. Mithilfe der folgenden Abfrage können wir die Gesamtzahl der Datenzeilen in den obigen Protokolldatentabellen ermitteln:

Wählen Sie COUNT(*) aus log_merge aus.

Um zu ermitteln, wie viele Protokolleinträge es in jedem dieser Jahre gibt, wird folgende Abfrage verwendet:

SELECT YEAR(dt) AS y, COUNT(*) AS Einträge FROM log_merge GROUP BY y;

MERGE-Tabellen ermöglichen nicht nur das gleichzeitige Verweisen auf mehrere Tabellen, ohne dass mehrere Abfragen ausgeführt werden müssen, sondern bieten auch die folgenden Vorteile.

1) Mit der MERGE-Tabelle kann eine logische Einheit erstellt werden, deren Größe die von jeder MyISAM-Tabelle zulässige maximale Länge überschreitet.

2) Die komprimierte Datentabelle ist in der MERGE-Datentabelle enthalten. Wenn beispielsweise ein bestimmtes Jahr vorbei ist, werden Sie der entsprechenden Protokolldatei wahrscheinlich keine Datensätze mehr hinzufügen. Sie können sie daher mit dem Tool myisampack komprimieren, um Platz zu sparen. Die MERGE-Tabelle funktioniert dann trotzdem wie gewohnt.

3) MERGE-Datentabellen unterstützen auch DELETE- und UPDATE-Operationen. Der INSERT-Vorgang ist umständlicher, da MySQL wissen muss, in welche Mitgliedstabelle die neue Datenzeile eingefügt werden soll. Die Definition einer MERGE-Tabelle kann eine Option INSERT_METHOD enthalten, deren mögliche Werte NO, FIRST und LAST sind, was jeweils bedeutet, dass der INSERT-Vorgang verboten ist und die neue Datenzeile in die erste oder letzte Tabelle eingefügt wird, die in der aktuellen UNION-Option aufgeführt ist. Beispielsweise behandelt die folgende Definition INSERT-Operationen an der Tabelle log_merge als INSERT-Operationen an der Tabelle log_2007 – der letzten in der Option UNION aufgeführten Tabelle:

TABELLE ERSTELLEN log_merge( 
  dt DATETIME NICHT NULL, 
  info VARCHAR(100) NICHT NULL, 
  INDEX(dt) 
) ENGINE = MERGE UNION = (log_2004, log_2005, log_2006, log_2007) INSERT_METHOD = LAST;

Erstellen Sie eine neue Mitgliedstabelle log_2009 mit derselben Tabellenstruktur und ändern Sie dann die Tabelle log_merge, um log_2009 einzuschließen: log_2009:

CREATE TABLE log_2009 LIKE log_2008; //Neue Tabelle basierend auf der alten Tabelle erstellen ALTER TABLE log_merge UNION = (log_2004, log_2005, log_2006,log_2007,log_2008,log_2009);

Das könnte Sie auch interessieren:
  • Implementieren von Einfüge- oder Aktualisierungsvorgängen in MySQL (ähnlich der Merge-Anweisung von Oracle)
  • MySQLMerge-Speicher-Engine

<<:  Analyse der prinzipiellen Implementierung aus dem Quellcode des Mini-Programm-Entwicklertools

>>:  CentOS 8-Installationsdiagramm (superdetailliertes Tutorial)

Artikel empfehlen

Reiner CSS-Code zum Erzielen von Fluss und dynamischen Linieneffekten

Ideen: Eine äußere Box legt den Hintergrund fest;...

Anwendungsbeispiele für die MySQL-Volltextsuche

Inhaltsverzeichnis 1. Umweltvorbereitung 2. Daten...

So stellen Sie Spring Boot mit Docker bereit

Die Entwicklung der Docker-Technologie bietet ein...

So stellen Sie das Crownblog-Projekt mit Docker in der Alibaba Cloud bereit

Front-End-Projektpaketierung Suchen Sie .env.prod...

Installieren Sie Percona Server+MySQL auf CentOS 7

1. Umgebungsbeschreibung (1) CentOS-7-x86_64, Ker...

Der Unterschied und die Verwendung von json.stringify() und json.parse()

1. Unterschiede zwischen JSON.stringify() und JSO...

So ziehen Sie das Docker-Image herunter, um die Version anzuzeigen

Um die Version und das Tag des Bildes anzuzeigen,...

Zusammenfassung der Verwendung von TypeScript in React-Projekten

Vorwort Dieser Artikel konzentriert sich auf die ...

Sollte ich beim Erstellen einer Website die Kodierung UTF-8 oder GB2312 verwenden?

Beim Öffnen ausländischer Websites werden häufig ...

HTML n Möglichkeiten zum Erreichen eines alternativen Farbcode-Beispielcodes

In diesem Artikel wird hauptsächlich der Beispiel...

Detaillierte Analyse von Absturzfällen bei MySQL-Instanzen

[Problembeschreibung] Unsere Produktionsumgebung ...

Erfahren Sie, wie Sie Nginx schnell in CentOS7 installieren

Inhaltsverzeichnis 1. Übersicht 2. Laden Sie das ...

So verwenden Sie @media in mobilen adaptiven Stilen

Allgemeiner Handy-Stil: @media alle und (Ausricht...

Detaillierte Erklärung zur Verwendung von $emit in Vue.js

1. Übergeordnete Komponenten können Props verwend...