mysql delete语句非常耗时_解决项目中MySQL数据库执行删除语句时间太长的问题
问题描述:
由于业务需求,需要删除一些重复数据。即删除openid对应的2条数据,最终只保留一行。
MySQL数据库,sql语句比较简单:删除数据前,备份数据是必须的!
先来错误的演示:
1.先把错误数据查询出来
SELECT
id,
openid,
COUNT(*) as recCount
FROM tb_wx_user_info_bak
GROUP BY openid
HAVING COUNT( * ) > 1
2.根据要删除的数据的ID,进行删除
DELETE FROM tb_wx_user_info_bak WHERE id IN
(
SELECT
id,
openid,
COUNT(*) AS recCount
FROM tb_wx_user_info_bak
GROUP BY openid
HAVING COUNT( * ) > 1
)
一看就会,一做就废。
执行了上面的sql,果然,把sqlyog客户端的操作界面卡住了。
于是再开了个新的窗口。也不知道这个sql要执行多久,只能等着了。
3小时过后,这个sql窗口还是老样子,也不知道删除成功了多少数据。
在新的窗口中查询数据表,还是一样的数据量,应该是在卡住的窗口删除了一些数据但是没有提交,因此在新的窗口,数据量没有变化。
*****
在等待的时间中,想了想卡住的原因:
1.目标数据库表,同时执行新增数据与删除数据。
2.表的内存不足
3.删除语句没有使用索引。
4.删除数据的sql太差,一次删除的数据量太大(76330)
和同事请教后,得到建议:
1.优化sql
--建立要删除的数据ID构成的临时表id_temp
id:自增主键,id_data:要删除的数据ID
--把要删除的数据的ID插入表id_temp
Insert into id_temp(id_data) ( SELECT id FROM tb_wx_user_info_bak GROUP BY openid HAVING COUNT( * ) > 1 )
--把id_temp表中的id_data字段作为参数传给删除的sql
DELETE FROM tb_wx_user_info_bak WHERE id IN ( select id_data from id_temp where id > 0 and id < 5000 )
每次只删除5000条数据。避免批量处理导致MySQL无法处理数据的问题。
2.要优化具体的sql,需要结合实际场景。
譬如,要模拟大量用户操作一张表的数据,从而实现同时删除数据和插入数据到表中的情景。
达到了上述条件,再对sql的每一部分进行优化,了解sql的性能瓶颈在哪一块。
以上面的sql为例:
DELETE FROM tb_wx_user_info_bak WHERE id IN ( select id_data from id_temp where id > 0 and id < 5000 )
该sql的性能瓶颈可能处于子查询中,要解决查询的性能瓶颈,可以从索引入手,建立索引提高查询效率。
修改好sql以后,发布服务器操作记录
实际操作记录
[unicorn@unicomm auaa-audit]#
[unicorn@unicomm auaa-audit]# ./app.sh startDev
-bash: ./app.sh: Permission denied ###错误1:缺少操作权限
[unicorn@unicomm auaa-audit]#
[unicorn@unicomm auaa-audit]#
[unicorn@unicomm auaa-audit]# sudo ./app.sh startDev
sudo: ./app.sh: command not found
[unicorn@unicomm auaa-audit]#
[unicorn@unicomm auaa-audit]# chmod +x app.sh
[unicorn@unicomm auaa-audit]#
[unicorn@unicomm auaa-audit]#
---
[unicorn@unicomm auaa-audit]# sudo ./app.sh startDev
sudo: unable to execute ./app.sh: No such file or directory ###错误2:编码格式错误
[unicorn@unicomm auaa-audit]# pwd
/u02/auaa-audit/tmp/auaa-audit
[unicorn@unicomm auaa-audit]# file -i app.sh
app.sh: text/x-shellscript; charset=utf-8
[unicorn@unicomm auaa-audit]#
[unicorn@unicomm auaa-audit]#
[unicorn@unicomm auaa-audit]# iconv app.sh -f utf-8 -t UNICODE -o app.sh --verbose
app.sh:
[unicorn@unicomm auaa-audit]#
[unicorn@unicomm auaa-audit]#
[unicorn@unicomm auaa-audit]# file -i app.sh
app.sh: text/plain; charset=utf-16le #修改编码格式成功
---
[unicorn@unicomm auaa-audit]# ./app.sh startDev
-bash: ./app.sh: cannot execute binary file ###错误3:缺少可执行jar包
---
检查服务的启动参数等等
本次范爷检查出来的问题是:启动参数中定义的jdk的路径,找不到正确版本的jdk。
范爷把app.sh文件重新配置后,在185服务器商安装了jdk1.8后,配置了该服务器的JAVA_HOME环境变量等等。
[unicorn@unicomm jdk1.8.0_201]# pwd
/usr/local/jdk1.8.0_201
[unicorn@unicomm jdk1.8.0_201]# vi /etc/profile
---
修改profile文件内容如下:
#set java environment
export JAVA_HOME=/usr/local/jdk1.8.0_201
export PATH=$JAVA_HOME/bin:$PATH
谨以此自勉:还有什么是比什么也不做更困难的呢!
mysql delete语句非常耗时_解决项目中MySQL数据库执行删除语句时间太长的问题相关推荐
- mysql选什么隔离级别_互联网项目中mysql应该选什么事务隔离级别
摘要 企业千万家,靠谱没几家. 社招选错家,亲人两行泪. 祝大家金三银四跳槽顺利! 引言 开始我们的内容,相信大家一定遇到过下面的一个面试场景 面试官:"讲讲mysql有几个事务隔离级别?& ...
- 为什么只能sudo进mysql_解决项目中MySQL数据库执行删除语句时间太长的问题
问题描述: 由于业务需求,需要删除一些重复数据.即删除openid对应的2条数据,最终只保留一行. MySQL数据库,sql语句比较简单:删除数据前,备份数据是必须的! 先来错误的演示: 1.先把错误 ...
- ttfb 指 耗时_网页响应慢,waiting(TTFB)时间过长,接口返回耗时,数据库占用CPU 90%以上...
记一次 网页响应慢,waiting(TTFB)时间过长,接口返回耗时,数据库占用CPU 90%以上问题排查 症状:H5页面打开白板,几十秒后出现页面,调试跟踪访问接口waiting(TTFB:全称 T ...
- php中可以用于执行sql语句的函数是,在PHP中,使用()函数执行SQL语句。
[判断题]朱文印的是留下文字和印边 [单选题]在<外储说右上>记载了公元前上世纪的幌子是什么? [单选题]在乳剂型软膏基质中常加入羟苯酯类(尼泊金类),其作用为( ) [判断题]三拍子的节 ...
- python连接数据库mysql失败_解决python连接mysql报错问题
解决python连接mysql报错问题 最近跑python脚本时遇到一个问题,当sql语句中有中文时,执行python脚本报以下错误: Traceback (most recent call last ...
- 互联网项目中MySQL应该选什么事务隔离级别
引言 开始我们的内容,相信大家一定遇到过下面的一个面试场景 面试官:"讲讲mysql有几个事务隔离级别?" 你:"读未提交,读已提交,可重复读,串行化四个!默认是可重 ...
- vscode+phpstudy连接使用mysql(解决phpstudy中mysql无法启动的问题)
vscode+phpstudy连接使用mysql(解决phpstudy中mysql无法启动的问题) 使用vscode+phpstudy配置php开发环境网上很文章都是挺好的,都成功解决了我的问题.但是 ...
- idea 模块jdk依赖总是自动变_解决IDEA中导入新的maven依赖后Language Level自动重置问题...
问题: 弄了个测试项目,因为有涉及JDK1.8的代码,所以将IDEA中默认的Language Level 5(即对应JDK1.5),修改为了8(即对应JDK1.8),但是每次引入新的maven依赖,自 ...
- win10 更新计算机时间,win10更新时间太长怎么回事_windows10更新时间太久解决教程...
在使用win10系统的时候,经常会需要电脑进行更新,而我们会发现每次更新都会耗时1-2个小时时间.让人等的不耐烦,遇到win10更新时间太长怎么回事呢?接下来给大家分享一下windows10更新时间太 ...
最新文章
- python--属性魔法方法
- UVa10000 - Longest Paths(为什么是WA)
- 为什么要尽量设定一个主键?
- java中io流中显示中文_关于JAVA中IO流相关问题概述
- java Arrays Generic
- markdown-Macdown
- VSS Get Latest Version 没有提示recursive的对话框解决
- Java记录 -45- List的toString方法
- vb中空操作(等待)的指令、延时方法
- int 转 const char*
- 文档级关系抽取方法总结
- sitemap死链检测工具-免费sitemap死链检测抓取工具
- mysql 给root授权_mysql授权
- 《数学建模与数学实验》第5版 网络优化 习题5.9
- 字符串的交叉合并c语言,C语言 两字符串的合并
- Kafka高性能之页缓存(page cache)使用
- APP下载链接在微信内打不开显示已停止访问该网页怎么办?
- 新浪微博客户端开发详解-总结(四)
- 常用工具类(8/14)
- 双路服务器单路运行,双路服务器和单路服务器有什么区别?