python-巧妙利用集合对数据库表进行比较统计

笔者所在公司最近上了一个项目,同一套配置参数表需要在oracle与mysql同时配置,为了确保数据一致性,需要定期对这2个不同数据库参数表进行比较。
刚开始觉得很简单嘛,先把Oracle表数据存放到一个列表,mysql再存放到另外一个列表,双重循环比较就搞定了。说干就干,写了个demo,先弄一个100多万数据的表比较。代码如下:

    begin_time =time.time()  
    for row in oracle_ip_list:
        for mysql_ip in mysql_ip_List:
            if row[0] == mysql_ip[0] and ( row[1] !=mysql_ip[1] or row[2] != mysql_ip[2] or row[3] !=mysql_ip[3]\
               or row[4] !=mysql_ip[4] or row[5] !=mysql_ip[5] or row[6] !=mysql_ip[6] or row[7] !=mysql_ip[7]\
               or row[8] !=mysql_ip[8]  ):
                print("equip_region_id={}不相等".format(row[0]))
                print("oracle内容:{}".format(row))
                print("mysql 内容:{}".format(mysql_ip))
     print("循环集耗时:{}秒".format(time.time()-begin_time))

结果一运行,10分钟了结果还没出来。这种统计方法效率肯定是极其低下,怎么办?

突然灵光一闪,试试集合呢。
部分代码如下:

    self.cursor.execute(strSql)
    oracle_ip_list= self.cursor.fetchall()
    print("数据库耗时:{}秒".format(time.time()-begin_time))
    oracle_ip_set = set([x for x in oracle_ip_list])
    mysql_ip_set = set([x for x in mysql_ip_List])

    #求取对称差集
    begin_time =time.time()
    duichen_diff_set = oracle_ip_set^mysql_ip_set
    print("对称差集耗时:{}秒".format(time.time()-begin_time))
    print(duichen_diff_set) 

运行代码,对称差集耗时:0.6614160537719727秒

我完全惊呆了!!

从上面例子可以看出,如果执行多重循环,每个循环实例超过阈值,效率就会非常低,能避免尽量避免,不能就要通过其它方法解决了!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值