查询来确定数据库中表的大小? (MySQL的)

网站“如何计算MySQL数据库大小”给出了两个查询:

确定所有数据库的大小

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 ; 

确定数据库中所有表的大小

 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"; 

第一个查询正常工作,但第二个查询不会生成结果集。 它只显示没有任何行的字段的名称。 如何修改第二个查询,以正确显示我的数据库中的表的大小的大小。

"schema_name"replace为其中一个数据库的名称。

并使用单引号string文字 ,而不是双引号。

这是一个有用的线程。 OP的第二个配方上的这个细微的变化只返回表格(没有视图),并按表格大小sorting返回的数据集 – 从最大到最小:

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 :我今天需要在PostGRES中做同样的事情,并从这个答案中借用一些帮助(另外一个在closures浏览器标签后丢失了),这就是我最终的结果。 在这里添加它,以防其他人有用。

 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 ; 

我认为这是更好的.. http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html

 show table status from database; 

这里是我用来给出数据库中每个表的大小的查询。

 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