Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách lấy kích thước của bảng trong MySQL

Giống như hầu hết các cơ sở dữ liệu quan hệ, MySQL cung cấp siêu dữ liệu hữu ích về chính cơ sở dữ liệu đó. Trong khi hầu hết các cơ sở dữ liệu khác đề cập đến thông tin này như một catalog , tài liệu MySQL chính thức đề cập đến INFORMATION_SCHEMA siêu dữ liệu dưới dạng tables .

Bất kể tên là gì, điều quan trọng là thông tin được cung cấp bởi INFORMATION_SCHEMA này những cái bàn. Mọi thứ từ viewsuser_privilieges thành columns và các bảng tables có thể được tìm thấy trong INFORMATION_SCHEMA . Vì mục đích của mình, chúng tôi đặc biệt quan tâm đến tables siêu dữ liệu mà chúng tôi có thể truy vấn để thực sự trích xuất kích thước của các bảng khác nhau trong hệ thống.

Kích thước bảng danh sách từ một cơ sở dữ liệu duy nhất

Như có thể thấy trong tài liệu chính thức, INFORMATION_SCHEMA.TABLES bảng chứa khoảng 20 cột, nhưng với mục đích xác định dung lượng ổ đĩa được sử dụng bởi các bảng, chúng tôi sẽ tập trung vào hai cột cụ thể:DATA_LENGTHINDEX_LENGTH .

  • DATA_LENGTH là chiều dài (hoặc kích thước) của tất cả dữ liệu trong bảng (tính bằng bytes ).
  • INDEX_LENGTH là chiều dài (hoặc kích thước) của tệp chỉ mục cho bảng (cũng tính bằng bytes ).

Được trang bị thông tin này, chúng tôi có thể thực hiện một truy vấn sẽ liệt kê tất cả các bảng trong một cơ sở dữ liệu cụ thể cùng với không gian đĩa (kích thước) của mỗi bảng. Chúng tôi thậm chí có thể tạo ra một chút tưởng tượng và chuyển đổi các giá trị kích thước bình thường từ bytes thành thứ gì đó hữu ích và dễ hiểu hơn đối với hầu hết mọi người như 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;

Trong ví dụ này, sử dụng bookstore cơ sở dữ liệu, chúng tôi đang kết hợp DATA_LENGTHINDEX_LENGTH dưới dạng bytes , rồi chia nó cho 1024 hai lần để chuyển đổi thành kilobytes rồi đến megabytes . Tập hợp kết quả của chúng tôi sẽ giống như sau:

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

Nếu bạn không quan tâm đến tất cả các bảng trong cơ sở dữ liệu và chỉ muốn kích thước của một bảng cụ thể, bạn có thể chỉ cần thêm AND TABLE_NAME = "your_table_name" đến WHERE mệnh đề. Ở đây chúng tôi chỉ muốn thông tin về book bảng:

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;

Kết quả, như mong đợi, bây giờ là:

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

Liệt kê Tất cả Kích thước Bảng Từ TẤT CẢ Cơ sở dữ liệu

Nếu bạn đang gặp phải sự cố trong đó cơ sở dữ liệu của bạn đang tăng kích thước nhưng bạn không biết bảng nào là thủ phạm, có thể hữu ích khi truy vấn kích thước của tất cả bảng trong tất cả cơ sở dữ liệu trong toàn bộ hệ thống. Điều này có thể được thực hiện dễ dàng với truy vấn sau:

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;

Điều này sẽ trả về không chỉ kích thước của bảng, mà còn trả về tên bảng và cơ sở dữ liệu mẹ mà nó được liên kết.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Một ràng buộc để ngăn chặn việc chèn một chuỗi trống trong MySQL

  2. Làm cách nào để tìm kiếm dấu gạch chéo (\) trong MySQL? và tại sao không cần thoát (\) cho where (=) nhưng lại bắt buộc phải Like?

  3. Giải thích về MySQL Single Quotes, Double Quotes, Back Quotes Cách sử dụng

  4. Bật Entity Framework 6 cho MySql (C #) trong WinForms của Microsoft Visual Studio 2013

  5. Cách kết nối với MySQL bằng Microsoft .NET