暂无图片
MySQL 根据某个条件查询出来的数据 怎么算它的磁盘占用大小?
我来答
分享
暂无图片 匿名用户
MySQL 根据某个条件查询出来的数据 怎么算它的磁盘占用大小?

MySQL 根据某个条件查询出来的数据 怎么算它的磁盘占用大小?

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
watson

1、根据你要的条件创建个临时表:

create table 临时表 as select * from A表 where 某个条件

2、根据临时表的名称查询在mysql里的大小:

select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') from tables where table_schema='数据库名称' AND table_name='表名称';

暂无图片 评论
暂无图片 有用 0
ora_221
2022-12-28
问题正解,虽然这个需求感觉没什么用,哈哈~
张sir

只能大概算个平均,根据查询出来的字段的类型长度,算一个总的长度,再乘上行数。

暂无图片 评论
暂无图片 有用 0
shunwahⓂ️

查询统计mysql占用磁盘空间大小
1.统计某个库的各个表的数据和索引的占用空间大小

select
TABLE_NAME,
concat(truncate(data_length/1024/1024,2),’ MB’) as data_size,
concat(truncate(index_length/1024/1024,2),’ MB’) as index_size
from information_schema.tables
where TABLE_SCHEMA = ‘tab’
order by data_length desc;

2.统计某个库的某个表的占用空间大小

SELECT
concat( round( sum( data_length / 1024 / 1024 / 1024 ), 2 ), ‘G’ ) AS DATA
FROM
information_schema.TABLES
WHERE
table_schema = ‘tab’
AND table_name = ‘tab2’;
暂无图片 评论
暂无图片 有用 0
大大刺猬

这种事情应该开发做的, 你服务器上统计的大小和客户端上占用的大小是不一样的(编码,格式等都不一样).而且还涉及到索引之类的. 你可以参考show profile block io, 也可以统计网络传输的大小. 但是还可能涉及到压缩之类的. 所以还是建议客户端统计.

python可以参考如下(int按4字节算.)

获取数据

import pymysql conn = pymysql.connect( host='127.0.0.1', port=3308, user='root', password='123456', ) cursor = conn.cursor() sql = "select * from db1.sbtest1" cursor.execute(sql) data = cursor.fetchall()

内存中的大小计算(不含对象信息)

也可以使用 sys.getsizeof() 注:该函数未递归

total_size = 0 for x in data: for y in x: total_size += 4 if isinstance(y,int) else len(y) print(round(total_size/1024/1024,2),'MB')

保存为文件的大小(使用pickle)

也可以使用to_bytes()

import pickle import os filename = 't20221228.tmp.data' with open(filename,'wb') as f: pickle.dump(data,f) print(round(os.path.getsize(filename)/1024/1024,2),'MB')
暂无图片 评论
暂无图片 有用 0
2022-12-28
服务器上统计的大小和客户端上占用的大小是不一样的。
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏