Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak uzyskać rozmiar tabeli w MySQL?

Podobnie jak większość relacyjnych baz danych, MySQL zapewnia przydatne metadane dotyczące samej bazy danych. Podczas gdy większość innych baz danych odnosi się do tych informacji jako do catalog , oficjalna dokumentacja MySQL odnosi się do INFORMATION_SCHEMA metadane jako tables .

Niezależnie od nazwy ważne są informacje dostarczone przez te INFORMATION_SCHEMA tabele. Wszystko z views i user_privilieges do columns i tables można znaleźć w INFORMATION_SCHEMA . Dla naszych celów szczególnie interesują nas tables metadane, o które możemy zapytać, aby faktycznie wyodrębnić rozmiar różnych tabel w systemie.

Lista rozmiarów tabel z jednej bazy danych

Jak widać w oficjalnej dokumentacji, INFORMATION_SCHEMA.TABLES tabela zawiera około 20 kolumn, ale w celu określenia ilości miejsca na dysku używanej przez tabele skupimy się w szczególności na dwóch kolumnach:DATA_LENGTH i INDEX_LENGTH .

  • DATA_LENGTH to długość (lub rozmiar) wszystkich danych w tabeli (w bytes ).
  • INDEX_LENGTH to długość (lub rozmiar) pliku indeksu dla tabeli (również w bytes ).

Uzbrojeni w te informacje, możemy wykonać zapytanie, które wyświetli listę wszystkich tabel w określonej bazie danych wraz z miejscem na dysku (rozmiarem) każdej z nich. Możemy nawet stać się nieco bardziej wyrafinowani i przekonwertować wartości normalnego rozmiaru z bytes w coś bardziej użytecznego i zrozumiałego dla większości ludzi, takiego jak 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;

W tym przykładzie za pomocą bookstore bazy danych, łączymy DATA_LENGTH i INDEX_LENGTH jako bytes , a następnie dzieląc przez 1024 dwa razy 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 interesują Cię wszystkie tabele w bazie danych i chcesz mieć tylko rozmiar konkretnej tabeli, możesz po prostu dodać AND TABLE_NAME = "your_table_name" do WHERE klauzula. Tutaj chcemy tylko informacji o book tabela:

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;

Wyniki, zgodnie z oczekiwaniami, są teraz:

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

Wyświetl wszystkie rozmiary tabel ze WSZYSTKICH baz danych

Jeśli napotykasz problem polegający na tym, że Twoja baza danych rośnie, ale nie wiesz, która tabela jest winowajcą, przydatne może być zapytanie o rozmiar wszystkie tabele w wszystkich bazy 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.TABLES
ORDER BY
  (DATA_LENGTH + INDEX_LENGTH)
DESC;

Zwróci to nie tylko rozmiar tabeli, ale także nazwę tabeli i nadrzędną bazę danych, z którą jest powiązana.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON_INSERT() – Wstaw wartości do dokumentu JSON w MySQL

  2. mysqli_fetch_array() oczekuje, że parametr 1 to mysqli_result, wartość logiczna podana w

  3. MySQL:Widok z podzapytanie w Ograniczeniu klauzuli FROM

  4. Jak działa funkcja LCASE() w MySQL

  5. Jak dołączyć zmienną PHP do instrukcji MySQL?