现在有个表t

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789

mysql> desc t;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| owner          | varchar(30)  | YES  |     | NULL    |                |
| object_name    | varchar(128) | YES  |     | NULL    |                |
| subobject_name | varchar(30)  | YES  |     | NULL    |                |
| object_id      | int          | NO   | PRI | NULL    | auto_increment |
| data_object_id | int          | YES  |     | NULL    |                |
| object_type    | varchar(19)  | YES  |     | NULL    |                |
| created        | datetime     | YES  |     | NULL    |                |
| last_ddl_time  | datetime     | YES  |     | NULL    |                |
| timestamp      | varchar(19)  | YES  |     | NULL    |                |
| status         | varchar(7)   | YES  |     | NULL    |                |
| temporary      | varchar(1)   | YES  |     | NULL    |                |
| generate       | varchar(1)   | YES  |     | NULL    |                |
| secondary      | varchar(1)   | YES  |     | NULL    |                |
| namespace      | int          | YES  |     | NULL    |                |
| edition_name   | varchar(30)  | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+
15 rows in set (0.00 sec)

一共有116w行数据

mysql> select count(*) from t;
+----------+
| count(*) |
+----------+
|  1167136 |
+----------+
1 row in set (0.17 sec)

想要执行update t set owner='SB';

肯定不能直接跑上面SQL,其一,这是一个大事务,会导致主从延迟,其次,SQL没有where过滤条件,会把整个表锁住

MySQL可以利用主键切片的方法对上面SQL进行切片: https://blog.csdn.net/robinson1988/article/details/106007292

对表根据主键切片之后,可以将数据分为多份,然后开多个窗口并行执行,这样就能加快UPDATE执行速度

下面是Python全自动主键切片+并行执行脚本,脚本里面是将数据切分为4分,开4个并行进程

from multiprocessing import Pool
import pymysql
import time
import os
import iodef processData(txt):print('开始执行:', time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))command='mysql -uroot -poracle -Dtest <'+txtos.system(command)print('执行完成:', time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))returnif __name__ == '__main__':conn = pymysql.connect("192.168.56.10", "scott", "tiger", "test")cur = conn.cursor()sql = "SELECT concat('update t set owner= ''SB'' where object_id>',avg_row * (n - 1),' and object_id<=', avg_row * n, ';') split_sql " \"FROM (SELECT n, min_id, max_id, ceil(max_id / 100) avg_row FROM (WITH RECURSIVE x(n) AS (SELECT 1 UNION ALL SELECT n + 1  FROM x  WHERE n < 100" \") SELECT *  FROM x) a, (SELECT min(object_id) min_id FROM t) b, (SELECT max(object_id) max_id  FROM t) c ) a"cur.execute(sql)rows = []result = cur.fetchall()slice0 = open('slice0.txt', 'w', newline='', encoding='utf8')slice1 = open('slice1.txt', 'w', newline='', encoding='utf8')slice2 = open('slice2.txt', 'w', newline='', encoding='utf8')slice3 = open('slice3.txt', 'w', newline='', encoding='utf8')for i in range(1,len(result)+1):if i%4==0:slice0.writelines(result[i - 1][0] + '\n')elif i%4==1:slice1.writelines(result[i - 1][0] + '\n')elif i%4==2:slice2.writelines(result[i - 1][0] + '\n')elif i%4==3:slice3.writelines(result[i - 1][0] + '\n')slice0.close()slice1.close()slice2.close()slice3.close()cur.close()conn.close()with Pool(4) as pool:pool.map(processData,['slice0.txt','slice1.txt','slice2.txt','slice3.txt'])

单个窗口跑:

mysql> update t set owner='NC';
Query OK, 1167136 rows affected (40.34 sec)
Rows matched: 1167136  Changed: 1167136  Warnings: 0

根据主键切片开并行跑:

[root@server ~]# python3 update.py
开始执行: 2020-05-29 15:53:38
开始执行: 2020-05-29 15:53:38
开始执行: 2020-05-29 15:53:38
开始执行: 2020-05-29 15:53:38
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
执行完成: 2020-05-29 15:53:49
执行完成: 2020-05-29 15:53:49
执行完成: 2020-05-29 15:53:49
执行完成: 2020-05-29 15:53:50

可以看到开4个并行进程,总共只需要10秒钟就跑完了,单窗口跑要40秒,正好提升4倍性能

最后,要开多少个并行进程跟你机器CPU有关,不建议开超过CPU CORE这么多个并行进程

利用Python多进程执行,加快MySQL批量添加数据的执行速度相关推荐

  1. 写底层 jdbc 实现mysql数据库增删改的 合并方法 的类 继承ConnectionFactory 实现DaoMessage接口: 并批量添加数据

    接口: public interface DaoMessage<T> {int ERROR = 0x400;int SUCCESS = 0x200; //接口参数默认finalint ge ...

  2. ef 批量保存 oracle,mybatis-oracle与mysql批量添加

    mybatis-oracle与mysql批量添加 1.oracle批量添加 insert into CRITERION_CODE_INSPECT (ID, CRITERION_CODE, CRITER ...

  3. springboot执行批量插入_springboot+Mybatis 注解\Xml两种方式批量添加数据

    1.使用注解的方式批量添加数据,在该方法中,传进来的参数是一个List集合,使用一个foreach 循环解析集合的数据,最后再批量保存到数据库,具体如下截图: 代码如下: //批量保存 @Insert ...

  4. MySQl数据库-批量添加数据的两种方法

    当你需要往数据表中添加数据,如果少量,手动添加其实没什么问题.但是当你需要测试大量数据时,比如要统计一年.一个月.一个星期的数据的区别,而且需求是必须每天都要有数据,这时就需要批量添加数据.在这里以u ...

  5. 钉钉一行代码_利用Python快速搭建钉钉和邮件数据推送系统

    前面的文章我们写到了利用Python实现钉钉和邮件的数据推送,在数据处理这一块实现了对mysql和odps的数据获取和处理,可以满足常规业务大部分数据场景需求,在一家初创公司数据基础建设还不完善的时候 ...

  6. Mysql批量插入数据问题解决和优化

    Mysql批量插入数据问题解决和优化 一.问题描述 项目中mysql批量插入大概50000左右数据,使用事务和批量,但是速度依旧很慢,大约60s左右,迫切希望改进这个问题. 二.问题原因 尽管是批量a ...

  7. 利用python的selenium模块向Plant-mPLoc提交数据

    利用python的selenium模块向Plant-mPLoc提交数据 流程一般步骤 1.对数据的预处理 2. 环境的配置 3.代码分析及流程思想 回顾和展望 流程一般步骤   首先我们对得到的序列预 ...

  8. python处理excel表格数据-利用Python处理和分析Excel表中数据实战.doc

    利用Python处理和分析Excel表中数据实战 [利用python进行数据分析--基础篇]利用Python处理和分析Excel表中数据实战 原创 2017年06月28日 15:09:32 标签: p ...

  9. ThinkPHP批量添加数据和getField()示例

    批量添加数据 // 批量添加数据 $User = M('users'); $dataList[] = array('name'=>'thinkphp','email'=>'thinkphp ...

最新文章

  1. ubuntu g++编译32位应用
  2. 网络广告计费方式常用术语
  3. 反射式红外光电检测管 : ITR9909
  4. hdu 1516(编辑距离+记录路径)
  5. 将Spring Boot应用程序部署到Tomcat中
  6. 与「韦神」齐名,他35岁任教清华!18岁一战成名,数学界颜值巅峰
  7. 关于Linux自带的python2.6.6升级到2.7.10版本步骤详解及pip、ipython的安装
  8. RN子组件获取redux数据
  9. CTS(11)---android自动化测试CTS源码分析之一
  10. 大数据之_数据采集Flume_Flume了解_学习内容介绍---Flume工作笔记002
  11. isbool php,PHP PHPUnit assertIsBool()用法及代码示例
  12. python文件管不了_Python文件_管道与模块编写
  13. 剑指offer——面试题55:字符流中第一个不重复的字符
  14. 程序员的必杀技——编程全能词典
  15. 华为手机耳机sws音效是什么_耳机sws音效是什么 华为手机耳机sws音效是什么
  16. 整理六百篇web前端知识混总
  17. cpolar内网穿透工具
  18. PHP操作MongoDB技術總結
  19. 使用Python进行OpenCV颜色检测和过滤
  20. 大家好才是真的好,“通用设计”知多少

热门文章

  1. JavaScript的调用栈、回调队列和事件循环
  2. 2018年黑龙江由俄进口原油2725.2万吨同比增加67.1%
  3. error C2143: syntax error : missing ‘;’ before ‘type’
  4. Windows下Redmine插件安装
  5. 手机APP和WAP版的区别
  6. 文档转换乱码异常解决:unoconv openoffice libreoffice
  7. Git如何处理代码冲突
  8. 将NGINX Plus配置为Web服务器
  9. 容器编排技术 -- Kubernetes 垃圾收集
  10. 华中科技大学计算机网络实验_第四届江苏省计算机网络与云计算新技术研讨会在南京召开...