首页 > 解决方案 > 获取数据库中最大和最小表的大小

问题描述

我是 SQL 的初学者,我得到了这个命令,它返回给定数据库中所有表的大小。

SELECT 
    table_schema AS 'Database',
    table_name AS 'Table',
    ROUND(((data_length + index_length) / 1024 / 1024), 2) 'Size (MB)'
FROM
    information_schema.TABLES
WHERE
    table_schema = DATABASE-NAME
ORDER BY (data_length + index_length) DESC;

但是,我正在尝试对其进行修改,以便返回以 MB 为单位的最大和最小表的大小。

在我最后一次尝试获得最大尺寸时,我尝试过这个:

SELECT 
    table_schema AS 'Database', table_name AS 'Table', MAX(Size)
FROM
    (SELECT 
        (ROUND(((data_length + index_length) / 1024 / 1024), 2)) AS Size
    FROM
        information_schema.TABLES) AS subquery
WHERE
    table_schema = DATABASE-NAME;

但是我收到一个错误(错误代码 1054),说“字段列表”中的“table_schema”不存在。

我知道如何使用聚合函数从常规列中获取最小值和最大值,但我不知道如何使用别名列来做到这一点。

标签: mysql

解决方案


您可以使用以下内容:

SELECT tInfo.table_schema, tInfo.table_name, ROUND(((tInfo.data_length + tInfo.index_length) / 1024 / 1024), 2) AS `Size (MB)` 
FROM information_schema.TABLES tInfo INNER JOIN (
    SELECT 
        table_schema,
        MAX(data_length + index_length) AS `max_size`,
        MIN(data_length + index_length) AS `min_size`
    FROM information_schema.TABLES
    GROUP BY table_schema
) tSizes ON tInfo.table_schema = tSizes.table_schema AND (tInfo.data_length + tInfo.index_length) IN (tSizes.`max_size`, tSizes.`min_size`)
WHERE tInfo.table_schema LIKE 'DATABASE-NAME'

推荐阅读