Mysql查询 各个数据库和表的占用大小

查看各个数据库的占用大小

# 列出所有数据库的大小(以 MB 为单位)

SELECT 
    table_schema AS `Database`, 
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS `Size (MB)`
FROM information_schema.TABLES
GROUP BY table_schema
ORDER BY `Size (MB)` DESC;

查看某个数据库中各个表的占用大小

# 列出指定数据库中所有表的大小(以 MB 为单位)
# 需要替换 your_database_name 为你想要查看的数据库名

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

查看所有数据库中各个表的占用大小 (如果表的数量过多不推荐使用,不方便查看数据)

# 列出所有数据库中所有表的大小(以 MB 为单位)

SELECT 
    table_schema AS `Database`, 
    table_name AS `Table`, 
    ROUND((data_length + index_length) / 1024 / 1024, 2) AS `Size (MB)`
FROM information_schema.TABLES
ORDER BY `Size (MB)` DESC;

查看表的详细大小信息

# 可以列出表的详细大小信息,包括数据大小、索引大小和总大小(以 MB 为单位).
# 需要替换 your_database_name 为你想要查看的数据库名

SELECT 
    table_name AS `Table`, 
    ROUND(data_length / 1024 / 1024, 2) AS `Data Size (MB)`, 
    ROUND(index_length / 1024 / 1024, 2) AS `Index Size (MB)`, 
    ROUND((data_length + index_length) / 1024 / 1024, 2) AS `Total Size (MB)`
FROM information_schema.TABLES
WHERE table_schema = 'your_database_name'
ORDER BY `Total Size (MB)` DESC;

查看碎片化严重的表

# 可以列出碎片化严重的表(Free Space 表示未使用的空间)
# 需要替换 your_database_name 为你想要查看的数据库名

SELECT 
    table_schema AS `Database`, 
    table_name AS `Table`, 
    ROUND(data_free / 1024 / 1024, 2) AS `Free Space (MB)`
FROM information_schema.TABLES
WHERE data_free > 0
ORDER BY `Free Space (MB)` DESC;

Free Space 介绍:

 1. Free Space 的来源
  MySQL 中,Free Space(空闲空间)是指表中未使用的存储空间。它通常是由于以下原因产生的
    - 删除操作:当从表中删除数据时,MySQL 并不会立即释放磁盘空间,而是将这些空间标记为“空闲”,以便后续的插入操作可以重用这些空间。
    - 更新操作:如果更新操作导致某行数据变大,MySQL 可能会将该行数据移动到新的位置,而原来的位置会被标记为“空闲”。
    - 表的碎片化:频繁的插入、删除和更新操作可能导致表的存储空间变得不连续,从而产生碎片化的空闲空间。
 
 2.Free Space 的影响
    - 磁盘空间浪费:如果表的空闲空间过多,会导致磁盘空间被浪费。
    - 性能影响:虽然空闲空间可以被重用,但如果表的碎片化严重,可能会影响查询性能。

3.如何减少 Free Space

    - 优化表:使用 OPTIMIZE TABLE 命令可以重新组织表的存储空间,释放未使用的空间并减少碎片化。
        sql语句: OPTIMIZE TABLE your_table_name;

    - 重建表:通过 ALTER TABLE 重建表也可以释放空闲空间。
        sql语句: ALTER TABLE your_table_name ENGINE=InnoDB;

    - 定期维护:对于频繁删除和更新的表,建议定期执行优化操作。

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

文章标题:Mysql查询 各个数据库和表的占用大小

本文作者:伟生

发布时间:2025-03-25, 22:01:10

最后更新:2025-03-25, 22:17:59

原始链接:http://yoursite.com/2025/03/25/db_02_mysql_09/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏