2011-12-02 35 views
35

Trang web "How to calculate the MySQL database size" đưa ra hai câu hỏi:Truy vấn để xác định kích thước của bảng trong cơ sở dữ liệu? (Mysql)

Xác định kích thước của tất cả các cơ sở dữ liệu

SELECT table_schema "Data Base Name", SUM(data_length + index_length)/1024/1024 
"Data Base Size in MB" FROM information_schema.TABLES GROUP BY table_schema ; 

Xác định kích thước của tất cả các bảng trong một cơ sở dữ liệu

SELECT TABLE_NAME, table_rows, data_length, index_length, 
round(((data_length + index_length)/1024/1024),2) "Size in MB" 
FROM information_schema.TABLES WHERE table_schema = "schema_name"; 

Truy vấn đầu tiên hoạt động chính xác, nhưng truy vấn thứ hai không tạo ra tập kết quả. Nó chỉ hiển thị tên của các trường mà không có bất kỳ hàng nào. Làm thế nào tôi có thể sửa đổi các truy vấn thứ 2 để hiển thị chính xác kích thước của các bảng của tôi trong cơ sở dữ liệu của tôi.

Trả lời

25

Thay "schema_name" với tên của một trong những cơ sở dữ liệu của bạn.

use single-quotes for string literals, không phải dấu ngoặc kép.

+0

+1 cho câu trả lời và +1 cho câu trả lời trên dấu nháy đơn so với dấu ngoặc kép – user784637

17

Đây là một chuỗi hữu ích. biến thể nhẹ này trên công thức thứ hai của OP sẽ chỉ trả lại bảng (không xem) và ra lệnh cho các bộ dữ liệu trả về bởi kích thước bảng --- to-nhỏ nhất lớn nhất:

MySQL:

SELECT 
    TABLE_NAME, table_rows, data_length, index_length, 
    round(((data_length + index_length)/1024/1024),2) 'Size in MB' 
FROM information_schema.TABLES 
WHERE table_schema = 'yourSchemaName' and TABLE_TYPE='BASE TABLE' 
ORDER BY data_length DESC; 

PostGRES: Tôi cần làm điều tương tự trong PostGRES hôm nay và mượn một số trợ giúp từ this answer (và một số khác tôi bị mất sau khi đóng tab trình duyệt), đây là những gì tôi đã kết thúc. Thêm nó ở đây trong trường hợp nó hữu ích cho bất cứ ai khác.

SELECT 
    t.tbl table_name, 
    ct.reltuples row_count, 
    pg_total_relation_size(t.tbl) size, 
    pg_size_pretty(pg_total_relation_size(t.tbl)) pretty_size 
FROM (
    SELECT 
    table_name tbl 
    FROM information_schema.tables 
    WHERE 
     table_schema = 'public' 
     AND table_type = 'BASE TABLE' 
) t 
join (
    SELECT 
    relname, reltuples 
    FROM pg_class C 
    LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) 
    WHERE 
    nspname NOT IN ('pg_catalog', 'information_schema') 
     AND relkind='r' 
) ct 
on t.tbl = ct.relname 
order by size desc ; 
3

Đây là truy vấn tôi sử dụng để cung cấp kích thước của mỗi bảng trong cơ sở dữ liệu.

SELECT CASE WHEN (GROUPING(sob.name)=1) THEN 'All_Tables' 
    ELSE ISNULL(sob.name, 'unknown') END AS Table_name, 
    SUM(sys.length) AS Byte_Length 
FROM sysobjects sob, syscolumns sys 
WHERE sob.xtype='u' AND sys.id=sob.id 
GROUP BY sob.name 
WITH CUBE 
Các vấn đề liên quan