问题描述
在MySQL数据库中,我们可以使用如下的SQL语句来查看某个指定数据库的数据表的大致存储信息,如下:
show table status from myDatabaseName;
但这条SQL语句不能体现详细的数据表信息,比如占用存储空间最大的数据表是哪个,具体占用的存储空间是多少,这些数据都无法使用以上这条简单的查询得知。
那么,在MySQL数据库,如何使用SQL语句查看某个数据库或者所有数据库中数据表占用的存储空间大小呢?
方案一
可以使用如下的MySQL查询语句查询指定数据库某个数据表的占用存储空间的详情,如下:
SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = 'DB_NAME'
AND table_name = 'TABLE_NAME';注: 其中的table_schema表示数据库名称,table_name表示数据表名称。
或者,可以使用以下的MySQL查询语句查询当前服务器上所有数据库的所有数据表的存储空间占用详情,如下:
SELECT
table_schema as `Database`,
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
ORDER BY (data_length + index_length) DESC;
方案二SELECT TABLE_NAME AS "Table Name",
table_rows AS "Quant of Rows", ROUND( (
data_length + index_length
) /1024, 2 ) AS "Total Size Kb"
FROM information_schema.TABLES
WHERE information_schema.TABLES.table_schema = 'DATABASENAME'
LIMIT 0 , 30注: DATABASENAME 表示数据表名称。
或者,可以使用以下的MySQL查询语句来查询每个数据库的存储空间占用情况,如下:
SELECT table_schema "DB Name",
Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
FROM information_schema.tables
GROUP BY table_schema;
查询的结果可能如下:
DB Name | DB Size in MB
mydatabase_wrdp 39.1
information_schema 0.0
方案三SELECT
table_name AS "Table",
round(((data_length + index_length) / 1024 / 1024), 2) as size
FROM information_schema.TABLES
WHERE table_schema = "DATABASE_NAME"
ORDER BY size DESC;注: 其中的DATABASE_NAME表示数据表名称。size是以MB为单位的。
方案四
如果要查询当前选中的数据库的数据表的存储空间占用情况,则可以使用如下:
SELECT table_name ,
round(((data_length + index_length) / 1024 / 1024), 2) as SIZE_MB
FROM information_schema.TABLES
WHERE table_schema = DATABASE() ORDER BY SIZE_MB DESC;