使用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实现当前数据表的所有时间都增加或减少指定的时间间隔(推荐)

    MySQL实现当前数据表的所有时间都增加或减少指定的时间间隔(推荐)

    这篇文章主要介绍了MySQL实现当前数据表的所有时间都增加或减少指定的时间间隔,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • 升级到mysql-connector-java8.0.27的注意事项

    升级到mysql-connector-java8.0.27的注意事项

    这篇文章主要介绍了升级到mysql-connector-java8.0.27的注意事项,凡是升级总会碰到点问题,换了连接器后部署果然报错了,下面小编给大家分享解决方法,需要的朋友可以参考下
    2021-12-12
  • MySQL将CSV文件快速导入MySQL中的实现

    MySQL将CSV文件快速导入MySQL中的实现

    本文主要介绍了MySQL将CSV文件快速导入MySQL中的实现,主要包括navicat、workbench等软件中的导入向导手动导入或使用load data infile命令导入,感兴趣的可以了解一下
    2023-11-11
  • MySQL 触发器的使用及需要注意的地方

    MySQL 触发器的使用及需要注意的地方

    这篇文章主要介绍了MySQL 触发器的使用及需要注意的地方,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下
    2021-01-01
  • mysql生成随机字符串函数分享

    mysql生成随机字符串函数分享

    这篇文章主要介绍了mysql生成随机字符串函数分享,本文直接给出实现代码,需要的朋友可以参考下
    2015-02-02
  • MySQL计划任务(事件调度器) Event Scheduler介绍

    MySQL计划任务(事件调度器) Event Scheduler介绍

    MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件、定时任务机制,在指定的时间单元内执行特定的任务,因此今后一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能
    2013-10-10
  • Mysql常用函数大全(分类汇总讲解)

    Mysql常用函数大全(分类汇总讲解)

    今天小编就为大家分享一篇关于Mysql常用函数大全(分类汇总讲解),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • MySQL中lower_case_table_names作用及使用小结

    MySQL中lower_case_table_names作用及使用小结

    在使用DataEase连接外部数据库时,可能会遇到启动报错的问题,官方文档指出,修改数据库配置文件中的lower_case_table_names=1参数可以解决此问题,此参数控制表名大小写敏感性,感兴趣的可以了解一下
    2024-09-09
  • Mysql中有关Datetime和Timestamp的使用总结

    Mysql中有关Datetime和Timestamp的使用总结

    mysql数据库常用的时间类型有timestamp和datetime,两者主要区别是占用存储空间长度不一致、可存储的时间也有限制,本文就来详细的介绍一下,感兴趣的可以了解一下
    2021-12-12
  • MySQL 复制表详解及实例代码

    MySQL 复制表详解及实例代码

    这篇文章主要介绍了MySQL 复制表详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02

最新评论