匿名用户MySQL 根据某个条件查询出来的数据 怎么算它的磁盘占用大小?
MySQL 根据某个条件查询出来的数据 怎么算它的磁盘占用大小?
我来答
添加附件
收藏
复制链接
微信扫码分享
在小程序上查看
分享
添加附件
问题补充
4条回答
默认
最新
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只能大概算个平均,根据查询出来的字段的类型长度,算一个总的长度,再乘上行数。
评论
有用 0查询统计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回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

