查询以确定数据库中表的大小? (mysql)

Posted

技术标签:

【中文标题】查询以确定数据库中表的大小? (mysql)【英文标题】:Query to determine the size of tables in a database? (mysql) 【发布时间】:2012-01-11 21:38:46 【问题描述】:

网站"How to calculate the mysql database size" 给出了两个查询:

确定所有数据库的大小

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

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

【问题讨论】:

【参考方案1】:

"schema_name" 替换为您的 数据库之一的名称。

还有use single-quotes for string literals,不是双引号。

【讨论】:

+1 表示答案,+1 表示单引号与双引号的答案【参考方案2】:

这是一个有用的线程。 OP 的第二个配方的这种细微变化仅返回表(无视图),并按表大小对返回的数据集排序---从最大到最小:

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 中做同样的事情,并从 this answer 那里借了一些帮助(以及我在关闭浏览器选项卡后丢失的另一个),这就是我最终的结果和。在这里添加它以防它对其他人有用。

[编辑 9.28.2021:我从 RDS 实例中收到错误,基本上是“pg_total_relation_size 不存在”,解决方案是在查询的初始部分强制转换 t.tbl::text .]

SELECT 
  t.tbl table_name,
  ct.reltuples row_count,
  pg_total_relation_size(t.tbl::text) size,
  pg_size_pretty(pg_total_relation_size(t.tbl::text)) 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】:

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

show table status from database;

【讨论】:

这种方法的一个缺点是它不接受 ORDER BY 子句。 ://【参考方案4】:

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

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

【讨论】:

以上是关于查询以确定数据库中表的大小? (mysql)的主要内容,如果未能解决你的问题,请参考以下文章

Mysql中表名如果是3e开头,查询时报语法错,原因未知

Mysql中表名如果是3e开头,查询时报语法错,原因未知

如何设置MySQL中表的大小写区分

mysql数据库表名区分大小写

SqlServer查询某个数据库中表的数量?

MySQL 查询数据库大小