数据库——MySQL如何查看table(表)占用空间的大小(库、表所占磁盘空间大小)

本文介绍如何使用SQL查询语句来获取MySQL中指定数据库及表的数据长度和索引长度,进一步转换为MB单位以直观展示所占磁盘空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//先进去MySQL自带管理库:information_schema  
//然后查询 data_length,index_length
//你自己的数据库名:dbname   
//你自己的表名:tablename  
  
mysql> use information_schema;  
Database changed  
mysql> select data_length,index_length  
    -> from tables where  
    -> table_schema='dbname'  
    -> and table_name = 'tablename';  
+-------------+--------------+  
| data_length | index_length |  
+-------------+--------------+  
|   166379520 |    235782144 |  
+-------------+--------------+  
row in set (0.02 sec)  
  
mysql> select concat(round(sum(data_length/1024/1024),2),'MB') as data_length_MB,  
    -> concat(round(sum(index_length/1024/1024),2),'MB') as index_length_MB  
    -> from tables where  
    -> table_schema='dbname'  
    -> and table_name = 'tablename';  
+----------------+-----------------+  
| data_length_MB | index_length_MB |  
+----------------+-----------------+  
| 158.67MB       | 224.86MB        |  
+----------------+-----------------+  
row in set (0.03 sec)
 

 

 

查看MySQL库、表所占磁盘空间大小

  • 查询库
SELECT CONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),'MB') AS data_size,
CONCAT(TRUNCATE(SUM(max_data_length)/1024/1024,2),'MB') AS max_data_size,
CONCAT(TRUNCATE(SUM(data_free)/1024/1024,2),'MB') AS data_free,
CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_size
FROM information_schema.tables WHERE TABLE_SCHEMA = '数据库名';

 

  • 查询库
SELECT CONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),'MB') AS data_size,
CONCAT(TRUNCATE(SUM(max_data_length)/1024/1024,2),'MB') AS max_data_size,
CONCAT(TRUNCATE(SUM(data_free)/1024/1024,2),'MB') AS data_free,
CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_size
FROM information_schema.tables WHERE TABLE_NAME = '表名';
### 索引文件中索引用较大存储空间的原因 #### 1. **稠密索引的特点** 当数据文件中的记录未按照关键字顺序排列时,为了能够高效定位每一条记录的位置,通常会为每一个记录创建一个对应的索引项。这样的索引被称为稠密索引[^1]。由于每个记录都需要有一个独立的索引项,这必然会导致索引规模增大,从而据较大的存储空间。 #### 2. **索引项的内容构成** 每个索引项不仅包含了用于检索的关键字值,还必须保存指向实际数据记录的物理地址(如偏移量或指针)。对于大规模的数据集而言,即使单个索引项只用了少量的空间,但由于数量庞大,累积起来也会显著增加整个索引用的存储资源。 #### 3. **非稠密索引对比** 相比之下,在数据已按关键字排序的情况下可以采用非稠密索引方式,此时只需针对一组连续的记录设置单一索引项即可完成对该组内任意成员的有效寻址操作。这种方式虽然牺牲了一定程度上的灵活性——无法做到所谓的“预查找”,但却有效减少了所需的索引条目总数,进而降低了整体内存需求量。 #### 4. **底层数据结构的影响** 从更深层次来看,不同的数据库管理系统可能会选用特定类型的数据结构作为其实现索引机制的基础框架。例如B树及其变种形式广泛应用于关系型数据库之中,像MySQL就采用了基于B+Tree 的设计思路来构建其索引体系[^2]。这类复杂而强大的数据结构本身就需要额外开销用来维持节点间链接关系以及平衡状态等特性,进一步加剧了索引部分对系统资源的需求压力。 #### 5. **唯一性和其他约束条件的作用** 另外值得注意的一点是,某些特殊类型的索引比如唯一索引除了具备基本功能外还需确保对应列值在整个范围内保持独一无二性。这就意味着在执行插入或者更新动作之前必须先进行全面扫描验证是否存在冲突情况发生;同时还需要考虑如何妥善处理删除后的空闲位置回收等问题。上述过程无疑都会带来更多的元信息记录负担,间接造成更大的磁盘用现象[^3]。 综上所述,无论是因为需要逐条映射所有原始数据还是出于维护高级特性的必要考量,都不可避免地促使索引格向更大容量方向发展。 ```python # 示例代码展示简单列模拟索引概念 data_records = ["recordA", "recordB", "recordC"] index_table_dense = {i:data_records[i] for i in range(len(data_records))} # 稠密索引示例 print(index_table_dense) def create_sparse_index(records): sparse_index = {} group_size = 2 for idx in range(0, len(records), group_size): key = records[idx] value = (idx, min(idx + group_size -1 ,len(records)-1)) sparse_index[key]=value return sparse_index index_table_sparse = create_sparse_index(data_records) # 非稠密索引示例 print(index_table_sparse) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值