我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python 统计MySQL大于100万的表

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python 统计MySQL大于100万的表

线上的MySQL服务器,最近有很多慢查询。需要统计出行数大于100万的表,进行统一优化。

需要筛选出符合条件的表,统计到excel中,格式如下:

库名表名行数
db1users1234567

 

 

 

统计表的行数,有2中方法:

1. 通过查询mysql的information_schema数据库中INFODB_SYS_TABLESTATS表,它记录了innodb类型每个表大致的数据行数

2. select count(1) from 库名.表名 

 

下面来分析一下这2种方案。

第一种方案,不是精确记录的。虽然效率快,但是表会有遗漏!

第二钟方案,才是准确的。虽然慢,但是表不会遗漏。

 

备注:

count(1)其实这个1,并不是表示第一个字段,而是表示一个固定值。

count(1),其实就是计算一共有多少符合条件的行。
1并不是表示第一个字段,而是表示一个固定值。
其实就可以想成表中有这么一个字段,这个字段就是固定值1,count(1),就是计算一共有多少个1.

 

写入json文件

下面这段代码,是参考我之前写的一篇文章:

https://www.cnblogs.com/xiao987334176/p/9901692.html

 

在此基础上,做了部分修改,完整代码如下:

#!/usr/bin/env python3
# coding: utf-8
import pymysql
import json
conn = pymysql.connect(
    host="192.168.91.128",  # mysql ip地址
    user="root",
    passwd="root",
    port=3306,  # mysql 端口号,注意:必须是int类型
    connect_timeout = 3  # 超时时间
)
cur = conn.cursor()  # 创建游标
# 获取mysql中所有数据库
cur.execute('SHOW DATABASES')
data_all = cur.fetchall()  # 获取执行的返回结果
# print(data_all)
dic = {}  # 大字典,第一层
for i in data_all:
    if i[0] not in dic:  # 判断库名不在dic中时
        # 排序列表,排除mysql自带的数据库
        exclude_list = ["sys", "information_schema", "mysql", "performance_schema"]
        if i[0] not in exclude_list:  # 判断不在列表中时
            # 写入第二层数据
            dic[i[0]] = {'name': i[0], 'table_list': []}
            conn.select_db(i[0])  # 切换到指定的库中
            cur.execute('SHOW TABLES')  # 查看库中所有的表
            ret = cur.fetchall()  # 获取执行结果
            for j in ret:
                # 查询表的行数
                cur.execute('select count(1) from `%s`;'% j[0])
                ret = cur.fetchall()
                # print(ret)
                for k in ret:
                    print({'tname': j[0], 'rows': k[0]})
                    dic[i[0]]['table_list'].append({'tname': j[0], 'rows': k[0]})

with open('tj.json','w',encoding='utf-8') as f:
    f.write(json.dumps(dic))

 

直接读取tj.json文件,进行写入,完整代码如下:

#!/usr/bin/env python3
# coding: utf-8
import xlwt
import json
from collections import OrderedDict
f = xlwt.Workbook()
sheet1 = f.add_sheet('统计', cell_overwrite_ok=True)
row0 = ["库名", "表名", "行数"]
# 写第一行
for i in range(0, len(row0)):
    sheet1.write(0, i, row0[i])
# 加载json文件
with open("tj.json", 'r') as load_f:
    load_dict = json.load(load_f)  # 反序列化文件
    order_dic = OrderedDict()  # 有序字典
    for key in sorted(load_dict):  # 先对普通字典key做排序
        order_dic[key] = load_dict[key]  # 再写入key
    num = 0  # 计数器
    for i in order_dic:
        # 遍历所有表
        for j in order_dic[i]["table_list"]:
            # 判断行数大于100万时
            if j['rows'] > 1000000:
                # 写入库名
                sheet1.write(num + 1, 0, i)
                # 写入表名
                sheet1.write(num + 1, 1, j['tname'])
                # 写入行数
                sheet1.write(num + 1, 2, j['rows'])
                num += 1  # 自增1
    f.save('test1.xls')

 

执行程序,打开excel文件,效果如下:

1341090-20181126171812003-1216343547.png


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python 统计MySQL大于100万的表

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python 统计MySQL大于100万的表

线上的MySQL服务器,最近有很多慢查询。需要统计出行数大于100万的表,进行统一优化。需要筛选出符合条件的表,统计到excel中,格式如下:库名表名行数db1users1234567统计表的行数,有2中方法:1. 通过查询mysql的in
2023-01-31

MySQL 对于千万级的大表要怎么优化?

首先采用Mysql存储千亿级的数据,确实是一项非常大的挑战。Mysql单表确实可以存储10亿级的数据,只是这个时候性能非常差,项目中大量的实验证明,Mysql单表容量在500万左右,性能处于最佳状态。 针对大表的优化,主要是通过数据库分库分表来解决,目前比较普
MySQL 对于千万级的大表要怎么优化?
2015-09-18

python怎么统计大于阈值的个数

要统计大于阈值的个数,可以使用循环遍历列表或数组,然后通过判断每个元素是否大于阈值来计数。以下是一个使用循环统计大于阈值的个数的示例代码:```pythondef count_above_threshold(values, threshol
2023-08-15

如何在MySQL中创建一个高效的会计系统表结构以处理大量的数据?

如何在MySQL中创建一个高效的会计系统表结构以处理大量的数据?在现代商业中,会计系统扮演着重要的角色,用于记录和管理大量的财务数据。而在MySQL数据库中,如何设计高效的表结构来处理这些数据成为了一个关键问题。本文将介绍一种针对会计系统的
如何在MySQL中创建一个高效的会计系统表结构以处理大量的数据?
2023-10-31

如何在MySQL中设计一个安全性高且易于维护的会计系统表结构以满足合规要求?

如何在MySQL中设计一个安全性高且易于维护的会计系统表结构以满足合规要求?随着数字化时代的到来,会计系统在企业中扮演着至关重要的角色。设计一个安全性高且易于维护的会计系统表结构对于确保财务数据的完整性和准确性至关重要。本文将提供一些指导原
如何在MySQL中设计一个安全性高且易于维护的会计系统表结构以满足合规要求?
2023-10-31

编程热搜

目录