Das INFORMATION_SCHEMA ist theoretisch eine Reihe von im SQL-Standard festgelegten Ansichten, mit denen der Benutzer die Metadaten des Systems überprüfen kann. Wie ist das in MySQL implementiert?
Wenn ich eine Verbindung zu einer Neuinstallation herstelle, werden zwei Datenbanken angezeigt: mysql
und information_schema
. Nach der Verwendung von SHOW CREATE TABLE
Anweisungen in der information_schema
Datenbank sieht es so aus, als ob sie nicht als Satz von Ansichten implementiert sind, sondern stattdessen mit Basistabellen. Ist diese Annahme richtig? Oder gibt es andere Systemtabellen, die dem Benutzer verborgen bleiben?
mysql
information-schema
Ivotron
quelle
quelle
Antworten:
Die Datenbank INFORMATION_SCHEMA besteht aus temporären Tabellen, die die Speicher-Engine MEMORY verwenden.
Beispiel: Hier ist die Tabelle INFORMATION_SCHEMA.TABLES in MySQL 5.5.12 (Windows-Version)
Für diese Tabellen gibt es keinen physischen Ordner, nicht einmal FRM-Dateien. Sie können es nicht mysqldumpen. Du kannst es nicht fallen lassen. Sie können keine Tabellen hinzufügen. Sie können keine Tabellen daraus löschen. Also, wo sind die Tische ???
Alle Tabellen in der Datenbank INFORMATION_SCHEMA werden direkt als MEMORY-Speicher-Engine-Tabellen gespeichert. Sie sind vollständig in MySQL integriert, daher werden die .frm-Mechanismen in mysqld behandelt. In meiner Antwort habe ich zuerst das Tabellenlayout von INFORMATION_SCHEMA.TABLES gezeigt. Es ist eine temporäre Tabelle im Speicher. Es wird mithilfe von Storage Engine-Protokollen manipuliert. Wenn mysqld heruntergefahren wird, werden daher alle information_schema-Tabellen gelöscht. Wenn mysqld gestartet wird, werden alle Tabellen information_schema als TEMPORARY-Tabellen erstellt und mit Metadaten für jede Tabelle in der mysql-Instanz neu gefüllt.
Die Datenbank INFORMATION_SCHEMA wurde erstmals in MySQL 5.0 eingeführt, um Ihnen den Zugriff auf Metadaten zu Tabellen anderer Speicher-Engines zu ermöglichen. Sie können beispielsweise SHOW DATABASES ausführen , um eine Liste der Datenbanken abzurufen . Sie können sie auch folgendermaßen abfragen:
Sie können Tabellennamen in einer Datenbank auf zwei Arten abrufen:
oder
Von Anfang an hat MySQL die Datenbank INFORMATION_SCHEMA um die Prozessliste erweitert (ab MySQL 5.1). Sie können die Prozessliste tatsächlich abfragen, um nach lang laufenden Abfragen zu suchen, die noch mindestens 10 Minuten ausgeführt werden:
Sie können das INFORMATION_SCHEMA verwenden, um alle durchdachten Dinge zu erledigen:
Abrufen der Anzahl aller Tabellen mithilfe bestimmter Speicher-Engines:
Holen Sie sich die empfohlene MyISAM-Schlüsselpuffergröße in MB
Ermitteln Sie die empfohlene InnoDB-Pufferpoolgröße in GB
Datenträgernutzung aller Datenbanken durch Storage Engine in MB
Glauben Sie mir, es gibt noch wundervollere Verwendungen für INFORMATION_SCHEMA, die ich nicht weiter besprechen kann.
Beachten Sie, dass INFORMATION_SCHEMA so vertraulich ist, dass mysql ausgeführt wird und Sie Folgendes tun:
und dann in MySQL ausführen
Sie sehen Junk-Ordner als eine der Datenbanken.
Für DBAs und Entwickler ist es sehr wichtig, dies zu wissen. Kapitel 20 (Entwickler) und Kapitel 31 (DBAs) des Buches MySQL 5.0 Certification Study Guide
sind da, um sich auf die Entwickler- und DBA-Zertifizierungsprüfungen vorzubereiten. Holen Sie sich das Buch, studieren Sie diese Kapitel gut und Sie könnten mit MySQLs INFORMATION_SCHEMA großartige Dinge tun.
Die INFORMATION_SCHEMA-Datenbank ab MySQL 5.5 enthält jetzt Plugins, globale Variablen (Status und statisch), Sitzungsvariablen (Status und statisch), Status der Speicher-Engine, Leistungsmessinstrumente, Trigger-Map, Ereignisse (programmierbar) und vieles mehr.
Tut mir leid, dass dies wie WTMI scheint, aber ich bin ein großer Befürworter der Verwendung der Datenbank INFORMATION_SCHEMA.
quelle