lyc94620

如果想查看 Mysql 数据库的总的数据量或者某个表的数据或者索引大小,可以使用系统库 information_schema 来查询,这个系统库中有一个 TABLES 表,这个表是用来记录数据库中表的大小、行数、索引大小等信息

mysql > use information_schema;
Database changed
mysql > show create table TABLES;
mysql > desc TABLES;

表结构如下:

sql:

CREATE TEMPORARY TABLE `TABLES` (
   `TABLE_CATALOG` varchar(512) NOT NULL DEFAULT \'\',
   `TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT \'\',
   `TABLE_NAME` varchar(64) NOT NULL DEFAULT \'\',
   `TABLE_TYPE` varchar(64) NOT NULL DEFAULT \'\',
   `ENGINE` varchar(64) DEFAULT NULL,
   `VERSION` bigint(21) unsigned DEFAULT NULL,
   `ROW_FORMAT` varchar(20) DEFAULT NULL,
   `TABLE_ROWS` bigint(21) unsigned DEFAULT NULL,
   `AVG_ROW_LENGTH` bigint(21) unsigned DEFAULT NULL,
   `DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
   `MAX_DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
   `INDEX_LENGTH` bigint(21) unsigned DEFAULT NULL,
   `DATA_FREE` bigint(21) unsigned DEFAULT NULL,
   `AUTO_INCREMENT` bigint(21) unsigned DEFAULT NULL,
   `CREATE_TIME` datetime DEFAULT NULL,
   `UPDATE_TIME` datetime DEFAULT NULL,
   `CHECK_TIME` datetime DEFAULT NULL,
   `TABLE_COLLATION` varchar(32) DEFAULT NULL,
   `CHECKSUM` bigint(21) unsigned DEFAULT NULL,
   `CREATE_OPTIONS` varchar(255) DEFAULT NULL,
   `TABLE_COMMENT` varchar(2048) NOT NULL DEFAULT \'\',
   `BLOCK_FORMAT` varchar(20) DEFAULT NULL
 ) ENGINE=MEMORY DEFAULT CHARSET=utf8

这个表的字段很多,常用的字段有下面几个:

TABLE_SCHEMA:     数据库名
TABLE_NAME:     表名
ENGINE:       所使用的存储引擎
TABLES_ROWS:   记录行数
DATA_LENGTH:    表大小
INDEX_LENGTH:   索引大小

 

一个表的大小 = 数据量 + 索引大小

1、可以查询数据库的数据行数、表空间、索引空间,如下,将 [数据库名] 替换成你自己的数据库名即可。

SELECT TABLE_SCHEMA AS \'库名\',
CONCAT(ROUND(TABLE_ROWS/10000, 2), \' 万行\') AS \'行数\',
CONCAT(ROUND(SUM(DATA_LENGTH)/(1024*1024*1024), 2), \' GB\') AS \'表空间\',
CONCAT(ROUND(SUM(INDEX_LENGTH)/(1024*1024*1024), 2), \' GB\') AS \'索引空间\',
CONCAT(ROUND(SUM(DATA_LENGTH+INDEX_LENGTH)/(1024*1024*1024),2),\' GB\') AS\'总空间\'
FROM information_schema.TABLES WHERE TABLE_SCHEMA = [数据库名];

 

 

2、当然也可以不汇总,查询下各个表的情况进行分析,如下,将 [数据库名] 替换成你自己的数据库名即可。

SELECT TABLE_NAME AS \'表名\',
CONCAT(ROUND(TABLE_ROWS/10000, 2), \' 万行\') AS \'行数\',
CONCAT(ROUND(DATA_LENGTH/(1024*1024*1024), 2), \' GB\') AS \'表空间\',
CONCAT(ROUND(INDEX_LENGTH/(1024*1024*1024), 2), \' GB\') AS \'索引空间\',
CONCAT(ROUND((DATA_LENGTH+INDEX_LENGTH)/(1024*1024*1024),2),\' GB\') AS\'总空间\'
FROM information_schema.TABLES WHERE TABLE_SCHEMA = [数据库名] ORDER BY TABLE_ROWS DESC;

 

 

3、也可以查询下某个表的情况,如下,将 [数据库名] 和 [数据表名] 替换成你自己的数据库名和数据表名即可。

SELECT TABLE_NAME AS \'表名\',
CONCAT(ROUND(TABLE_ROWS/10000, 2), \' 万行\') AS \'行数\',
CONCAT(ROUND(DATA_LENGTH/(1024*1024*1024), 2), \' GB\') AS \'表空间\',
CONCAT(ROUND(INDEX_LENGTH/(1024*1024*1024), 2), \' GB\') AS \'索引空间\',
CONCAT(ROUND((DATA_LENGTH+INDEX_LENGTH)/(1024*1024*1024),2),\' GB\') AS\'总空间\'
FROM information_schema.TABLES WHERE TABLE_SCHEMA = [数据库名] AND TABLE_NAME = [数据表名] ORDER BY TABLE_ROWS DESC;

 

分类:

技术点:

相关文章:

  • 2021-07-23
  • 2021-12-09
  • 2021-12-09
  • 2022-12-23
  • 2021-06-19
  • 2021-12-10
  • 2021-05-18
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-07
  • 2021-11-29
  • 2021-12-09
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案