mysql海量数据条件删除
1. 问题描述:现在存在两个表,具体表结构及记录数如下所示:
mysql> desc user_mapping;
+------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+-------+
| open_id | varchar() | NO | PRI | NULL | |
| platform | tinyint() | NO | PRI | NULL | |
| serverid | int() unsigned | NO | PRI | | |
| uid | int() unsigned | NO | | NULL | |
| updatetime | int() | YES | | NULL | |
| lastlogin | int() | YES | | NULL | |
| via | varchar() | YES | | NULL | |
+------------+------------------+------+-----+---------+-------+
rows in set (0.00 sec)
mysql> select count(*) from user_mapping;
+----------+
| count(*) |
+----------+
| |
+----------+
row in set (2.49 sec)
mysql> desc uid1202;
+-----------------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+----------------------+------+-----+---------+-------+
| uid | int() unsigned | NO | | NULL | |
| last_login_time | int() unsigned | YES | | NULL | |
| accCharge | int() unsigned | YES | | | |
| level | smallint() unsigned | YES | | NULL | |
+-----------------+----------------------+------+-----+---------+-------+
rows in set (0.00 sec) mysql> select count(*) from uid1202;
+----------+
| count(*) |
+----------+
| |
+----------+
row in set (3.25 sec)
目的是将user_mapping表中的uid在uid1202表中存在的记录删除,mysql处理大数据时,多表连接会直接将服务器单核卡死,而且还不知道猴年马月才能处理完。
解决方案:
step1. 将user_mapping表和uid1202表dump到内网,建新库导入
step2. 去掉内网user_mapping表中的主键
alter table user_mapping drop primary key;
step3. 删除内网user_mapping表中uid重复的值删除保留一条
mysql -uusername -ppassword -e"select platform,uid from user_mapping group by uid having count(*) > 1 ;" > uid_double.txt
awk '{print "delete from user_mapping where platform="$1" and uid="$2";"}' uid_double.txt > del_double.sql
mysql -uusername -ppassword user_del < del_double.sql
step4. 修改user_mapping表,重新建立以uid为主键
alter table user_mapping add primary key(uid);
step4. 构造查询user_mapping表中uid在uid1202表中的语句
mysql -uusername -ppassword user_del -e"select uid from uid1202" > uid.txt
awk '{print "select open_id,platform,serverid from user_mapping where uid="$1"; "}' uid.txt > del_uid.sql
step5. 构造删除user_mapping表中以open_id,platform,serverid为条件的语句
mysql -uroot -p1234 user_del < del_uid.sql > del_usermapping.txt
sed -i '/open_id/d' del_usermapping.txt #删除奇数行table头
awk '{print "delete from user_mapping where open_id=\""$1"\" and platform="$2" and uid="$3" ;"}' del_usermapping.txt > del_usermapping.txt
step6. 分解查询语句到多个sql文件,在外网同时运行
#!/bin/bash
for i in $(seq )
do
cat del_usermapping.sql | head -n > del_usermapping_$i.sql
sed -i '1,1300000d' del_usermapping.sql
cat del_usermapping_$i.sql | wc -l
done for i in $(seq )
do
mysql -uroot -p1234 user_del < del_usermapping_$i.sql &
done
mysql海量数据条件删除的更多相关文章
- 在SQLSERVER中快速有条件删除海量数据技巧推荐
解释: 如果你的硬盘空间小,并且不想设置数据库的日志为最小(因为希望其他正常的日志希望仍然记录),而且对速度要求比较高,并清除所有的数据建议你用turncate table1,因为truncate 是 ...
- MYSQL中delete删除多表数据
MYSQL中delete删除多表数据 DELETE删除多表数据,怎样才能同时删除多个关联表的数据呢?这里做了深入的解释: 1. delete from t1 where 条件 2.delete t1 ...
- 第二百八十七节,MySQL数据库-条件语句、循环语句、动态执行SQL语句
MySQL数据库-条件语句.循环语句.动态执行SQL语句 1.if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGIN ; THEN ; ELSEIF ...
- mysql 清空或删除表数据后,控制表自增列值的方法
http://blog.sina.com.cn/s/blog_68431a3b0100y04v.html 方法1: truncate table 你的表名 //这样不但将数据全部删除,而且重新定位自增 ...
- 关于MySQL数据被删除后空间重用的问题实验
以前知道,MySQL在通过delete语句删除数据后,空间并不会被腾出,而只是在数据文件中被标记为已删除,除非执行optimize table.前两天听说,虽然delete数据后硬盘空间不会被腾出,但 ...
- Java根据条件删除Map中元素
今天在写程序过程中,需要根据判断条件删除一个Map中的相应数据,我自然而然想到可以通过调用Map中的remove(Object key)函数进行删除:代码如下: public Map<Doubl ...
- oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)
oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录) 分类: ORACLE 数据库 2011-05-24 16:39 8427人阅读 评论(2) 收藏 举报 oracledel ...
- Mysql创建、删除用户
1.新建用户 //登录MYSQL@>mysql -u root -p@>密码//创建用户mysql> insert into mysql.user(Host,User,Passwor ...
- paip.提升性能--- mysql 建立索引 删除索引 很慢的解决.
paip.提升性能--- mysql 建立索引 删除索引 很慢的解决. 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blo ...
随机推荐
- 启动MongoDB时,提示:error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
启动MongoDB时,提示: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: ...
- Winform打砖块游戏制作step by step第三节---移动挡板
一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 预备知识,无GDI画图基础的童鞋请先阅读一篇文章让你彻底弄懂WinFor ...
- 利用mkfs.ubifs和ubinize两个工具制作UBI镜像
转:http://blog.sina.com.cn/s/blog_9452251d01015z9h.html 有了mkfs.ubifs和ubinize两个工具后,就可以制作UBIFS镜像了,具体步骤如 ...
- XCode下的iOS单元测试
XCode 内置了 OCUnit 单元测试框架,但目前最好用的测试框架应该是 GHUnit.通过 GHUnit + OCMock 组合,我们可以在 iOS 下进行较强大的单元测试功能.本文将演示如何在 ...
- 【微信】微信小程序 应用内的页面跳转在添加了tab以后就跳转不成功的问题解决
在微信小程序中,本来应用页面内绑定在按钮上跳转页面可以成功,但是将页面添加在tab以后就不能实现跳转了 原本代码如下: //事件处理函数 bindViewTap: function() { wx.na ...
- telnet 查看端口是否可访问
1. 首先为什么要写这篇文章 说到为什么还得从DNS服务器说起.我在我的电脑上安装了DNS服务器,但是用网络去访问还怎么都访问都不上去.于是我就打开dos窗口,用ping命令查看是否可以ping( ...
- 认识多渲染目标(Multiple Render Targets)技术【转】
http://www.cnblogs.com/hellohuan/archive/2008/12/01/1345359.html 首先,渲染到纹理是D3D中的一项高级技术.一方面,它很简单,另一方面它 ...
- 可以使用foreach遍历循环的条件
大话C#中能使用foreach的集合的实现 转自:http://www.cnblogs.com/tangzhengyue/p/3339936.html 大家都知道foreach的语法: forea ...
- androidmanifest
在unity里面这个androidmanifest.xml 就相当于 buildsetting 里面的playersettings
- Cobbler无人值守安装系统
环境说明 系统版本 CentOS 6.9 x86_64 Cobbler是一款Linux安装服务器,可以快速设置网络安装环境.它粘合在一起并自动执行许多相关的Linux任务,因此部署新系统时不必在 ...