首页 > 数据库 >mysql大批量删除数据,工作记录

mysql大批量删除数据,工作记录

时间:2023-10-28 15:24:04浏览次数:31  
标签:tracking 删除 大批量 visitor event mysql 查询 data id

在10万记录的三张关系表中删除相对应的数据,三张表为层级嵌套关系

优化查询

目的:减少mysql数据库慢查询导致的长时间占据锁的情况出现
优化方向:将慢sql改为多次执行的快sql,避免长时间占用mysql资源情况出现

多表查询会用到的几种方式

连表查询

SELECT event_data.id FROM event_data
LEFT JOIN tracking_event
ON tracking_event.id = event_data.tracking_event_id
LEFT JOIN tracking_visitor
ON tracking_event.tto_clid = tracking_visitor.tto_clid
WHERE tracking_visitor.d_value REGEXP '"matomo": "449"'
AND event_data.d_key != "449"
LIMIT 100

嵌套子查询

SELECT event_data.id
FROM event_data
WHERE event_data.tracking_event_id in (
	SELECT tracking_event.id 
	FROM tracking_event
	WHERE tracking_event.tto_clid in (
		SELECT tracking_visitor.tto_clid 
		FROM tracking_visitor
		WHERE tracking_visitor.d_value 
		REGEXP '"matomo": "449"'
	)
)
LIMIT 100

连表查询和嵌套子查询在数据量大的情况下没有合理设置外键和索引都会很慢

将所有sql操作变为简单sql,分批执行,在程序中缓存结果,空间换时间

  • 查询tracking_visitor表中符合的数据的id,将其缓存到一个变量
  • 利用第一点缓存的数据查询第二章表tracking_event的数据,以此避免嵌套子查询和连表查询
  • 类似1、2点操作,将tracking_event的id缓存到一个变量,再查询event_data的数据
  • 现在已经拿到了三张表需要删除的数据了再分别删除即可

上述查询中都要加limit,分批执行

其他思路

1、将示例id在tracking_visitor表中取出来,作为索引
2、建立中间表,从头到尾读取数据,符合的保留到新的临时表,不符合的删除,最后交换两张表以此达到大批量删除数据
删除大表的多行数据时,会超出innod block table size的限制,最小化的减少锁表的时间的方案是:

  • 选择不需要删除的数据,并把它们存在一张相同结构的空表里
  • 重命名原始表,并给新表命名为原始表的原始表名
  • 删掉原始表

参考链接:https://blog.csdn.net/jike11231/article/details/126551510

标签:tracking,删除,大批量,visitor,event,mysql,查询,data,id
From: https://www.cnblogs.com/bitterteaer/p/17794101.html

相关文章

  • 面试必刷TOP101:15、删除有序链表中重复的元素-I
    题目题解importjava.util.*;publicclassSolution{publicListNodedeleteDuplicates(ListNodehead){//空链表if(head==null)returnnull;//遍历指针ListNodecur=head;//指针当前和下一位不为空......
  • [mysql][maxwell] maxwell无法连接mysql8.x,报错信息“Access Denied”
    前提使用mysql-maxwell-kafka进行增量同步的时候,kafka消费组没有得到任何消息。一个个排到最后才发现最核心的问题是mysql,麻了真的是。kafka没问题查进程,有两台机子的kafka未启动打开日志,报错org.apache.zookeeper.KeeperException$NodeExistsException:KeeperErrorCode=N......
  • CentOS 安装 MySQL8,超详细!
    CentOS安装MySQL8,超详细!一、离线安装MySQL1.检查是否已安装mysqlrpm-qa|grepmysql2.卸载已安装的mysqlrpm-evmysql80-community-release-el7-7.noarchrpm-evmysql-community-client-plugins-8.0.22-1.ky3.kb1.x86_643.下载rpm包:下载地址:MySQL::Dow......
  • linux解压缩,复制,重命名,删除,目录按更新时间排序,grep递归搜索文档
    linux解压缩,复制,重命名,删除,目录按更新时间排序,grep递归搜索文档1.解压缩压缩命令zip-p-rmymail-1026.zipmymail/解压命令unzipmymail-1026.zip2.复制将文件file1复制到dir1目录下的file2文件cpfile1dir1/file2将文件夹source_dir复制到target_dir目前并且修改......
  • 读高性能MySQL(第4版)笔记21_读后总结与感想兼导读
    1. 基本信息高性能MySQL:经过大规模运维验证的策略(第4版)HighPerformanceMySQL,FourthEdition[美] SilviaBotros(西尔维亚·博特罗斯);JeremyTinley(杰里米·廷利)电子工业出版社,2022年10月出版1.1. 读薄率书籍总字数471千字,笔记总字数50817字。读薄率50817÷47100......
  • Python 利用pandas和mysql-connector获取Excel数据写入到MySQL数据库
    如何将Excel数据插入到MySQL数据库中在实际应用中,我们可能需要将Excel表格中的数据导入到MySQL数据库中,以便于进行进一步的数据分析和处理。本文将介绍如何使用Python将Excel表格中的数据插入到MySQL数据库中。导入必要的库首先,我们需要导入pandas库和MySQLConnector/Python库......
  • manjaro 安装 mysql 8.0 的珠玑
    本来作为目前开箱即用,在Linux发行版排名靠前的基于arch的manajaro非常受欢迎有个pacman包管理工具还有更为只能的yaourt工具,本来是非常简单的,但是很神奇的就是,在我的机器上居然有问题源码编译安装mysql5.7无果,总是在cmakefile过程中会有出错,大概是我的gcc版本的问题,......
  • mysql查询单天,当周,当月函数
    1、查询当天的数据select*from表名 whereTO_DAYS(时间字段)=TO_DAYS(NOW());2、查询当周的数据select*from表名 whereYEARWEEK(DATE_FORMAT(时间字段,'%Y-%m-%d'))=YEARWEEK(NOW());3、查询当月的数据select*from表名 whereDATE_FORMAT(时间字段,'%Y%m')=DATE_FORMA......
  • mysql 索引
    1.索引介绍索引就是一种数据结构,类似于书的目录。意味着以后再查数据应该先找目录再找数据,而不是用翻页的方式查询数据索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。primarykeyuniquekeyindexkey注意:上面三种key前两种除了有加速查......
  • 26. 删除有序数组中的重复项
    1.题目介绍给你一个非严格递增排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为k,你需要做以下事情确保你的题解可以被通过:更......