使用mysql语句查看数据库表所占容量空间大小

 更新时间:2023年08月11日 09:37:32   作者:l386913  
这篇文章主要给大家介绍了关于如何使用mysql语句查看数据库表所占容量空间大小的相关资料,如何在MySQL数据库管理中查询数据库、表、索引的容量大小是经常遇到的需求,需要的朋友可以参考下

一、查看所有数据库容量大小

SELECT
	table_schema AS '数据库',
	sum( table_rows ) AS '记录数',
	sum(
	TRUNCATE ( data_length / 1024 / 1024, 2 )) AS '数据容量(MB)',
	sum(
	TRUNCATE ( index_length / 1024 / 1024, 2 )) AS '索引容量(MB)' 
FROM
	information_schema.TABLES 
GROUP BY
	table_schema 
ORDER BY
	sum( data_length ) DESC,
	sum( index_length ) DESC;

二、查看所有数据库各表容量大小

SELECT
	table_schema AS '数据库',
	table_name AS '表名',
	table_rows AS '记录数',
	TRUNCATE ( data_length / 1024 / 1024, 2 ) AS '数据容量(MB)',
	TRUNCATE ( index_length / 1024 / 1024, 2 ) AS '索引容量(MB)' 
FROM
	information_schema.TABLES 
ORDER BY
	data_length DESC,
	index_length DESC;

三、查看指定数据库容量大小

SELECT
	table_schema AS '数据库',
	sum( table_rows ) AS '记录数',
	sum(
	TRUNCATE ( data_length / 1024 / 1024, 2 )) AS '数据容量(MB)',
	sum(
	TRUNCATE ( index_length / 1024 / 1024, 2 )) AS '索引容量(MB)' 
FROM
	information_schema.TABLES 
WHERE
	table_schema = 'osale_im';

四、查看指定数据库各表容量大小

SELECT
	table_schema AS '数据库',
	table_name AS '表名',
	table_rows AS '记录数',
	TRUNCATE ( data_length / 1024 / 1024, 2 ) AS '数据容量(MB)',
	TRUNCATE ( index_length / 1024 / 1024, 2 ) AS '索引容量(MB)' 
FROM
	information_schema.TABLES 
WHERE
	table_schema = 'osale_im' 
ORDER BY
	data_length DESC,
	index_length DESC;

五:查看指定数据库指定表容量大小

六. 查看所有产生碎片的表

  SELECT table_schema db, 
         table_name, 
         data_free, 
         engine 
    FROM information_schema.tables 
   WHERE table_schema NOT IN ('information_schema', 'mysql') 
     AND data_free > 0 
ORDER BY DATA_FREE DESC;

查看某个表的碎片大小

SHOW TABLE STATUS LIKE '表名';

查询结果中的'Data_free'字段的值就是碎片大小。

七. 清理表碎片

/*1. MyISAM表*/
 
OPTIMIZE TABLE 表名
 
/*2. InnoDB表*/
 
ALTER TABLE 表名 engine = InnoDB

附:sql语句查询到整个数据库的容量

在需要备份数据库里面的数据时,我们需要知道数据库占用了多少磁盘大小,可以通过一些sql语句查询到整个数据库的容量,也可以单独查看表所占容量。

1、要查询表所占的容量,就是把表的数据和索引加起来就可以了
select sum(DATA_LENGTH)+sum(INDEX_LENGTH) from information_schema.tables 
where table_schema='数据库名';
  上面获取的结果是以字节为单位的,可以通过%1024在%1024的到M为单位的结果。
  2、查询所有的数据大小
select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') from tables; -- 查询所有的数据大小
  3、查询某个表的数据
select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') from tables where table_schema='数据库名' AND table_name='表名'; 
1Byte = 8 bits;
1KB = 1024Byte = 2的10次方Byte  = 1024 Byte
1MB = 1024KB   = 2的20次方Byte  = 1048576 Byte
1GB = 1024MB   = 2的30次方Byte  = 1073741824 Byte
1TB = 1024GB   = 2的40次方Byte  = 1099511627776 Byte
1PB = 1024TB   = 2的50次方Byte  = 1125899906842624 Byte
1EB = 1024PB   = 2的60次方Byte  = 1152921504606846976 Byte
1ZB = 1024EB   = 2的70次方Byte  = 1180591620717411303424 Byte
1YB = 1024ZB   = 2的80次方Byte  = 1208925819614629174706176 Byte
1DB = 1024YB   = 2的90次方Byte  = 1237940039285380274899124224 Byte
1NB = 1024DB   = 2的100次方Byte = 1267650600228229401496703205376 Byte
在mysql中有一个information_schema数据库,这个数据库中装的是mysql的元数据,包括数据库信息、数据库中表的信息等。所以要想查询数据库占用磁盘的空间大小可以通
  过对information_schema数据库进行操作。
information_schema中的表主要有:
  schemata表:这个表里面主要是存储在mysql中的所有的数据库的信息
  tables表:这个表里存储了所有数据库中的表的信息,包括每个表有多少个列等信息。
  columns表:这个表存储了所有表中的表字段信息。
  statistics表:存储了表中索引的信息。
  user_privileges表:存储了用户的权限信息。
  schema_privileges表:存储了数据库权限。
  table_privileges表:存储了表的权限。
  column_privileges表:存储了列的权限信息。
  character_sets表:存储了mysql可以用的字符集的信息。
  collations表:提供各个字符集的对照信息。
  collation_character_set_applicability表:相当于collations表和character_sets表的前两个字段的一个对比,记录了字符集之间的对照信息。
  table_constraints表:这个表主要是用于记录表的描述存在约束的表和约束类型。
  key_column_usage表:记录具有约束的列。
  routines表:记录了存储过程和函数的信息,不包含自定义的过程或函数信息。
  views表:记录了视图信息,需要有show view权限。
  triggers表:存储了触发器的信息,需要有super权限。

总结 

到此这篇关于使用mysql语句查看数据库表所占容量空间大小的文章就介绍到这了,更多相关mysql查看表容量空间大小内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql 8.0.18 安装配置方法图文教程(linux)

    mysql 8.0.18 安装配置方法图文教程(linux)

    这篇文章主要介绍了linux下mysql 8.0.18 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Mysql中InnoDB与MyISAM索引差异详解(最新整理)

    Mysql中InnoDB与MyISAM索引差异详解(最新整理)

    InnoDB和MyISAM在索引实现和特性上有差异,包括聚集索引、非聚集索引、事务支持、并发控制、覆盖索引、主键约束、外键支持和物理存储结构等方面,InnoDB更适合事务型应用,而MyISAM适合只读或读多写少的场景,本文介绍Mysql中InnoDB与MyISAM索引差异,感兴趣的朋友一起看看吧
    2025-03-03
  • 浅谈mysql 针对单张表的备份与还原

    浅谈mysql 针对单张表的备份与还原

    下面小编就为大家带来一篇浅谈mysql 针对单张表的备份与还原。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • mysql获取当前日期年月的两种实现方式

    mysql获取当前日期年月的两种实现方式

    这篇文章主要介绍了mysql获取当前日期年月的两种实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • MySQL与瀚高数据库的范围分区语法及实例代码

    MySQL与瀚高数据库的范围分区语法及实例代码

    MySQL分区技术通过将大表分割成多个小分区,提升查询性能和管理效率,分区可独立存储、备份和优化,适用于大数据集和时效性数据处理,这篇文章主要介绍了MySQL与瀚高数据库的范围分区语法及实例代码的相关资料,需要的朋友可以参考下
    2026-05-05
  • MySQL中的JSON字段List成员检查

    MySQL中的JSON字段List成员检查

    这篇文章主要介绍了MySQL中的JSON字段List成员检查,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Window环境下MySQL UDF提权

    Window环境下MySQL UDF提权

    本文章仅记录某次内网渗透过程中遇到的MySQL 采用UDF提权等方式进行获取权限,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2023-03-03
  • MySQL入门(四) 数据表的数据插入、更新、删除

    MySQL入门(四) 数据表的数据插入、更新、删除

    这篇文章主要介绍了mysql数据库中表的插入、更新、删除非常简单,但是简单的也要学习,细节决定成败,需要的朋友可以参考下
    2018-07-07
  • Mysql的timeout以及python重连方式

    Mysql的timeout以及python重连方式

    这篇文章主要介绍了Mysql的timeout以及python重连方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • MySQL-8.0.26配置图文教程

    MySQL-8.0.26配置图文教程

    最近公司项目更换数据库版本,在此记录分享一下自己安装配置MySQL8.0版本的过程吧,本文通过图文并茂的形式给大家介绍的非常详细,对MySQL-8.0.26配置教程感兴趣的朋友跟随小编一起看看吧
    2021-12-12

最新评论