Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So erhalten Sie die Größe einer Tabelle in MySQL

Wie die meisten relationalen Datenbanken stellt MySQL nützliche Metadaten über die Datenbank selbst bereit. Während die meisten anderen Datenbanken diese Informationen als catalog bezeichnen , bezieht sich die offizielle MySQL-Dokumentation auf das INFORMATION_SCHEMA Metadaten als tables .

Unabhängig vom Namen kommt es auf die Informationen an, die diese INFORMATION_SCHEMA liefern Tische. Alles aus views und user_privilieges in columns und tables finden Sie im INFORMATION_SCHEMA . Für unsere Zwecke interessieren uns vor allem die tables Metadaten, die wir abfragen können, um die tatsächliche Größe verschiedener Tabellen im System zu extrahieren.

Tabellengrößen aus einer einzigen Datenbank auflisten

Wie in der offiziellen Dokumentation zu sehen ist, die INFORMATION_SCHEMA.TABLES Tabelle enthält ungefähr 20 Spalten, aber um den von Tabellen belegten Speicherplatz zu bestimmen, konzentrieren wir uns besonders auf zwei Spalten:DATA_LENGTH und INDEX_LENGTH .

  • DATA_LENGTH ist die Länge (oder Größe) aller Daten in der Tabelle (in bytes ).
  • INDEX_LENGTH ist die Länge (oder Größe) der Indexdatei für die Tabelle (auch in bytes ).

Ausgestattet mit diesen Informationen können wir eine Abfrage ausführen, die alle Tabellen in einer bestimmten Datenbank zusammen mit dem Speicherplatz (Größe) jeder Tabelle auflistet. Wir können sogar etwas ausgefallener werden und die normalen Größenwerte von bytes umwandeln in etwas Nützlicheres und für die meisten Menschen Verständlicheres wie megabytes .

SELECT
  TABLE_NAME AS `Table`,
  ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`
FROM
  information_schema.TABLES
WHERE
  TABLE_SCHEMA = "bookstore"
ORDER BY
  (DATA_LENGTH + INDEX_LENGTH)
DESC;

In diesem Beispiel wird der bookstore verwendet Datenbank kombinieren wir die DATA_LENGTH und INDEX_LENGTH als bytes , dann dividieren Sie ihn durch 1024 zweimal in kilobytes umzuwandeln und dann megabytes . Unsere Ergebnismenge sieht in etwa so aus:

+----------------------------------+-----------+
| Table                            | Size (MB) |
+----------------------------------+-----------+
| book                             |       267 |
| author                           |        39 |
| post                             |        27 |
| cache                            |        24 |
...

Wenn Ihnen nicht alle Tabellen in der Datenbank wichtig sind und Sie nur die Größe einer bestimmten Tabelle möchten, können Sie einfach AND TABLE_NAME = "your_table_name" hinzufügen zum WHERE Klausel. Hier wollen wir nur Informationen über das book Tabelle:

SELECT
  TABLE_NAME AS `Table`,
  ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`
FROM
  information_schema.TABLES
WHERE
    TABLE_SCHEMA = "bookstore"
  AND
    TABLE_NAME = "book"
ORDER BY
  (DATA_LENGTH + INDEX_LENGTH)
DESC;

Die Ergebnisse lauten nun erwartungsgemäß:

+-------+-----------+
| Table | Size (MB) |
+-------+-----------+
| book  |       267 |
+-------+-----------+
1 row in set (0.00 sec)

Alle Tabellengrößen aus ALLEN Datenbanken auflisten

Wenn Sie auf ein Problem stoßen, bei dem Ihre Datenbank an Größe zunimmt, Sie aber nicht wissen, welche Tabelle der Übeltäter ist, kann es hilfreich sein, die Größe von all abzufragen Tabellen in alle Datenbanken im gesamten System. Dies kann einfach mit der folgenden Abfrage erreicht werden:

SELECT
  TABLE_SCHEMA AS `Database`,
  TABLE_NAME AS `Table`,
  ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`
FROM
  information_schema.TABLES
ORDER BY
  (DATA_LENGTH + INDEX_LENGTH)
DESC;

Dies gibt nicht nur die Größe der Tabelle zurück, sondern auch den Tabellennamen und die übergeordnete Datenbank, mit der sie verknüpft ist.