【问题标题】:Query to determine the size of tables in a database? (mysql)查询以确定数据库中表的大小? (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";

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

【问题讨论】:

    标签: mysql sql database


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 2017-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-09
        • 1970-01-01
        相关资源
        最近更新 更多