查看mysql库大小,表大小,索引大小

转自:http://www.cnblogs.com/lukcyjane/p/3849354.html

说明:

通过MySQL的 information_schema 数据库,可查询数据库中每个表占用的空间、表记录的行数;该库中有一个 TABLES 表,这个表主要字段分别是:

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

其他字段请参考MySQL的手册,查看一个表占用空间的大小,那就相当于是 数据大小 + 索引大小 。

 
查看所有库的大小
复制代码
mysql> use information_schema;
Database changed
mysql> select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data  from TABLES;
+----------+
| data     |
+----------+
| 104.21MB |
+----------+
1 row in set (0.11 sec)
复制代码

查看指定库的大小

复制代码
mysql> select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data  from TABLES where table_schema='jishi';
+---------+
| data    |
+---------+
| 26.17MB |
+---------+
1 row in set (0.01 sec)
复制代码
查看指定库的指定表的大小
复制代码
mysql> select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data  from TABLES where table_schema='jishi' and table_name='a_ya';
+--------+
| data   |
+--------+
| 0.02MB |
+--------+
1 row in set (0.00 sec)
复制代码

查看指定库的索引大小

复制代码
mysql> SELECT CONCAT(ROUND(SUM(index_length)/(1024*1024), 2), ' MB') AS 'Total Index Size' FROM TABLES  WHERE table_schema = 'jishi'; 
+------------------+
| Total Index Size |
+------------------+
| 0.94 MB          |
+------------------+
1 row in set (0.01 sec)
复制代码

查看指定库的指定表的索引大小

复制代码
mysql> SELECT CONCAT(ROUND(SUM(index_length)/(1024*1024), 2), ' MB') AS 'Total Index Size' FROM TABLES  WHERE table_schema = 'test' and table_name='a_yuser'; 
+------------------+
| Total Index Size |
+------------------+
| 21.84 MB         |
+------------------+
1 row in set (0.00 sec)
mysql> show create table test.a_yuser\G;
*************************** 1. row ***************************
       Table: a_yuser
Create Table: CREATE TABLE `a_yuser` (
  `email` varchar(60) NOT NULL DEFAULT '',
  `user_name` varchar(60) NOT NULL DEFAULT '',
  KEY `cc` (`email`(5)),
  KEY `ccb` (`user_name`(5)),
  KEY `ccbc` (`email`(5),`user_name`(5))
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
 
ERROR: 
No query specified
 
mysql> select count(*) from test.a_yuser;
+----------+
| count(*) |
+----------+
|  1073607 |
+----------+
1 row in set (0.00 sec)
复制代码
查看一个库中的情况
复制代码
mysql>  SELECT CONCAT(table_schema,'.',table_name) AS 'Table Name', CONCAT(ROUND(table_rows/1000000,4),'M') AS 'Number of Rows', CONCAT(ROUND(data_length/(1024*1024*1024),4),'G') AS 'Data Size', CONCAT(ROUND(index_length/(1024*1024*1024),4),'G') AS 'Index Size', CONCAT(ROUND((data_length+index_length)/(1024*1024*1024),4),'G') AS'Total'FROM information_schema.TABLES WHERE table_schema LIKE 'test';
+---------------+----------------+-----------+------------+---------+
| Table Name    | Number of Rows | Data Size | Index Size | Total   |
+---------------+----------------+-----------+------------+---------+
| test.a_br     | 0.4625M        | 0.0259G   | 0.0171G    | 0.0431G |
| test.a_skuclr | 0.7099M        | 0.0660G   | 0.0259G    | 0.0919G |
| test.a_yuser  | 1.0736M        | 0.0497G   | 0.0213G    | 0.0710G |
| test.test     | 0.0000M        | 0.0000G   | 0.0000G    | 0.0000G |
+---------------+----------------+-----------+------------+---------+
4 rows in set (0.13 sec)
复制代码

参考网址:
http://www.oschina.net/question/12_3673
http://blog.sina.com.cn/s/blog_4c197d420101fbl9.html
好记性不如烂笔头,把遇到的问题及其解决方法记录下来。

### 查看 MySQL大小 为了查询 MySQL 数据库中特定大小,可以利用 `information_schema` 数据库中的格信息。具体来说,可以通过查询 `TABLES` 来获取所需数据。 #### 使用 SQL 查询语句查看大小 通过执行如下 SQL 命令能够得到指定数据库下所有的空间使用情况: ```sql 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}'; ``` 此命令返回的结果会显示每张的名字以及它们各自占用的大致空间量(单位为 MB)。其中 `{your_database_name}` 需要替换为目标数据库的实际名称[^1]。 对于更详细的统计信息,还可以加入更多字段到 SELECT 子句里,比如单独列出 data_length 和 index_length 来区分数据本身所占空间与索引结构所占空间的不同部分。 另外值得注意的是,在某些情况下可能还需要考虑 InnoDB 格特有的文件存储方式对实际磁盘用量的影响;因为即使删除记录后,除非进行了优化操作或者重建了,否则这些已分配给该的空间不会立即被释放回操作系统。 #### 获取单个的具体尺寸详情 如果只关心某一张具体的,则可以在上述基础上进一步限定条件: ```sql SELECT table_name AS `Table`, engine, table_rows, ROUND(data_length/1024/1024,2) AS Data_Length_MB, ROUND(index_length/1024/1024,2) AS Index_Length_MB, ROUND((data_length+index_length)/1024/1024,2) AS Total_Size_MB FROM information_schema.tables WHERE table_schema='{database}' AND table_name='{table}'; ``` 这段代码不仅提供了总大小的信息,还包括引擎类型、行数等额外细节[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值