真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL如何統(tǒng)計(jì)行數(shù)大于100萬的表

MySQL如何統(tǒng)計(jì)行數(shù)大于100萬的表?針對(duì)這個(gè)問題,這篇文章給出了相對(duì)應(yīng)的分析和解答,希望能幫助更多想解決這個(gè)問題的朋友找到更加簡(jiǎn)單易行的辦法。

磐安ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

一、需求分析

線上的MySQL服務(wù)器,最近有很多慢查詢。需要統(tǒng)計(jì)出行數(shù)大于100萬的表,進(jìn)行統(tǒng)一優(yōu)化。

需要篩選出符合條件的表,統(tǒng)計(jì)到excel中,格式如下:

庫(kù)名表名行數(shù)
db1users1234567

二、統(tǒng)計(jì)表的行數(shù)

統(tǒng)計(jì)表的行數(shù),有2中方法:

1. 通過查詢mysql的information_schema數(shù)據(jù)庫(kù)中INFODB_SYS_TABLESTATS表,它記錄了innodb類 型每個(gè)表大致的數(shù)據(jù)行數(shù)
2. select count(1) from 庫(kù)名.表名

下面來分析一下這2種方案。

第一種方案,不是精確記錄的。雖然效率快,但是表會(huì)有遺漏!

第二鐘方案,才是準(zhǔn)確的。雖然慢,但是表不會(huì)遺漏。

備注:

count(1)其實(shí)這個(gè)1,并不是表示第一個(gè)字段,而是表示一個(gè)固定值。

count(1),其實(shí)就是計(jì)算一共有多少符合條件的行。
1并不是表示第一個(gè)字段,而是表示一個(gè)固定值。
其實(shí)就可以想成表中有這么一個(gè)字段,這個(gè)字段就是固定值1,count(1),就是計(jì)算一共有多少個(gè)1.

寫入json文件
下面這段代碼,是參考我之前寫的一篇文章:

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

在此基礎(chǔ)上,做了部分修改,完整代碼如下:
#!/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 端口號(hào),注意:必須是int類型
    connect_timeout = 3  # 超時(shí)時(shí)間
)
cur = conn.cursor()  # 創(chuàng)建游標(biāo)
# 獲取mysql中所有數(shù)據(jù)庫(kù)
cur.execute('SHOW DATABASES')
data_all = cur.fetchall()  # 獲取執(zhí)行的返回結(jié)果
# print(data_all)
dic = {}  # 大字典,第一層
for i in data_all:
    if i[0] not in dic:  # 判斷庫(kù)名不在dic中時(shí)
        # 排序列表,排除mysql自帶的數(shù)據(jù)庫(kù)
        exclude_list = ["sys", "information_schema", "mysql", "performance_schema"]
        if i[0] not in exclude_list:  # 判斷不在列表中時(shí)
            # 寫入第二層數(shù)據(jù)
            dic[i[0]] = {'name': i[0], 'table_list': []}
            conn.select_db(i[0])  # 切換到指定的庫(kù)中
            cur.execute('SHOW TABLES')  # 查看庫(kù)中所有的表
            ret = cur.fetchall()  # 獲取執(zhí)行結(jié)果
            for j in ret:
                # 查詢表的行數(shù)
                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))
三、寫入excel中
直接讀取tj.json文件,進(jìn)行寫入,完整代碼如下:
#!/usr/bin/env python3
# coding: utf-8
import xlwt
import json
from collections import OrderedDict
f = xlwt.Workbook()
sheet1 = f.add_sheet('統(tǒng)計(jì)', cell_overwrite_ok=True)
row0 = ["庫(kù)名", "表名", "行數(shù)"]
# 寫第一行
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):  # 先對(duì)普通字典key做排序
        order_dic[key] = load_dict[key]  # 再寫入key
    num = 0  # 計(jì)數(shù)器
    for i in order_dic:
        # 遍歷所有表
        for j in order_dic[i]["table_list"]:
            # 判斷行數(shù)大于100萬時(shí)
            if j['rows'] > 1000000:
                # 寫入庫(kù)名
                sheet1.write(num + 1, 0, i)
                # 寫入表名
                sheet1.write(num + 1, 1, j['tname'])
                # 寫入行數(shù)
                sheet1.write(num + 1, 2, j['rows'])
                num += 1  # 自增1
    f.save('test1.xls')

執(zhí)行程序,打開excel文件,效果如下:
MySQL如何統(tǒng)計(jì)行數(shù)大于100萬的表

以上就是MySQL統(tǒng)計(jì)行數(shù)大于100萬表的詳細(xì)內(nèi)容了,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊!


網(wǎng)站欄目:MySQL如何統(tǒng)計(jì)行數(shù)大于100萬的表
本文網(wǎng)址:http://weahome.cn/article/jhgpgs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部