mysql - 获取数据库中最大和最小表的大小
问题描述
我是 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”不存在。
我知道如何使用聚合函数从常规列中获取最小值和最大值,但我不知道如何使用别名列来做到这一点。
解决方案
您可以使用以下内容:
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'
推荐阅读
- discord.js - Discord Bot 命令提示符冻结
- snowflake-cloud-data-platform - 如何授予非管理员用户在 Snowflake 中查看完整的登录历史记录
- typescript - 如何从 emitDeclarationOnly 获取 TS 编译器错误?
- python - print (datetime.datetime.now()-datetime.timedelta(days=7)).date() 返回 NoneType' 对象没有属性 'date'
- laravel - 通过 Heroku 运行数据库播种器时出错
- linux - .Net Core Linux - Docker - 使用 DB2 进行本地调试
- python - 数据框的字典保持密钥完整性
- python - 根据列和列表中的重合度区分散点图中的点
- c++ - C++ 更改 istream
- reactjs - 使用 require 时 React 不显示 img,可能是 webpack 设置问题