Jak uzyskać rozmiar tabeli w MySQL
On 17 grudnia, 2021 by adminJak większość relacyjnych baz danych, MySQL dostarcza użytecznych metadanych o samej bazie danych. Podczas gdy większość innych baz danych odnosi się do tych informacji jako catalog, oficjalna dokumentacja MySQL odnosi się do metadanych INFORMATION_SCHEMA jako tables.
Niezależnie od nazwy, ważne są informacje dostarczane przez te INFORMATION_SCHEMA tabele. Wszystko od views i user_privilieges do columns i tables można znaleźć w INFORMATION_SCHEMA. Dla naszych celów szczególnie interesują nas metadane tables, które możemy odpytywać, aby faktycznie wyodrębnić rozmiary różnych tabel w systemie.
List Table Sizes From a Single Database
Jak widać w oficjalnej dokumentacji, tabela INFORMATION_SCHEMA.TABLES zawiera około 20 kolumn, ale dla celów określenia ilości miejsca na dysku wykorzystywanego przez tabele skupimy się w szczególności na dwóch kolumnach: DATA_LENGTH i INDEX_LENGTH.
-
DATA_LENGTHjest długością (lub rozmiarem) wszystkich danych w tabeli (wbytes). -
INDEX_LENGTHjest długością (lub rozmiarem) pliku indeksu dla tabeli (również wbytes).
Uzbrojeni w te informacje, możemy wykonać zapytanie, które wyświetli listę wszystkich tabel w określonej bazie danych wraz z przestrzenią dyskową (rozmiarem) każdej z nich. Możemy nawet zrobić się nieco bardziej fantazyjni i przekonwertować normalne wartości rozmiaru z bytes na coś bardziej użytecznego i zrozumiałego dla większości ludzi, jak megabytes.
SELECT TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`FROM information_schema.TABLESWHERE TABLE_SCHEMA = "bookstore"ORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
W tym przykładzie, używając bazy danych bookstore, łączymy DATA_LENGTH i INDEX_LENGTH jako bytes, następnie dzielimy to przez 1024 dwa razy, aby przekonwertować na kilobytes, a następnie megabytes. Nasz zestaw wyników będzie wyglądał mniej więcej tak:
+----------------------------------+-----------+| Table | Size (MB) |+----------------------------------+-----------+| book | 267 || author | 39 || post | 27 || cache | 24 |...
Jeśli nie zależy nam na wszystkich tabelach w bazie danych, a jedynie na rozmiarze konkretnej tabeli, możemy po prostu dodać AND TABLE_NAME = "your_table_name" do klauzuli WHERE. Tutaj chcemy tylko informacji o tabeli book:
SELECT TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`FROM information_schema.TABLESWHERE TABLE_SCHEMA = "bookstore" AND TABLE_NAME = "book"ORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
Wyniki, zgodnie z oczekiwaniami, są teraz:
+-------+-----------+| Table | Size (MB) |+-------+-----------+| book | 267 |+-------+-----------+1 row in set (0.00 sec)
List All Table Sizes From ALL Databases
Jeśli napotkasz problem, w którym Twoja baza danych zwiększa swój rozmiar, ale nie wiesz, która tabela jest winowajcą, użyteczne może być zapytanie o rozmiar wszystkich tabel we wszystkich bazach danych w całym systemie. Można to łatwo osiągnąć za pomocą następującego zapytania:
SELECT TABLE_SCHEMA AS `Database`, TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`FROM information_schema.TABLESORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
Zwróci to nie tylko rozmiar tabeli, ale także nazwę tabeli i bazę danych, z którą jest powiązana.
Dodaj komentarz