首页 > 数据库 >MySQL 删除数据 批量删除(大量)数据

MySQL 删除数据 批量删除(大量)数据

时间:2024-11-06 20:19:03浏览次数:3  
标签:删除 表名 索引 MySQL table 数据 delete

目录

一、删除大表的部分数据

二、删除带索引的表

三、MySQL中的表的删除操作


一、删除大表的部分数据

一个表有1亿6000万的数据,有一个自增ID。最大值就是1亿6000万,需要删除大于250万以后的数据,有什么办法可以快速删除?

看到mysql文档有一种解决方案:http://dev.mysql.com/doc/refman/5.0/en/delete.html

If you are deleting many rows from a large table, you may exceed the lock table size for an InnoDB table. To avoid this problem, or simply to minimize the time that the table remains locked, the following strategy (which does not use DELETE at all) might be helpful:

Select the rows not to be deleted into an empty table that has the same structure as the original table:
INSERT INTO t_copy SELECT * FROM t WHERE ... ;

Use RENAME TABLE to atomically move the original table out of the way and rename the copy to the original name:
RENAME TABLE t TO t_old, t_copy TO t;

Drop the original table:
DROP TABLE t_old;

删除大表的多行数据时,会超出innod block table size的限制,最小化的减少锁表的时间的方案是:
1、选择不需要删除的数据,并把它们存在一张相同结构的空表里
2、重命名原始表,并给新表命名为原始表的原始表名
3、删掉原始表

二、删除带索引的表

在My SQL数据库使用中,有的表存储数据量比较大,达到每天三百万条记录左右,此表中建立了三个索引,这些索引都是必须的,其他程序要使用。由于要求此表中的数据只保留当天的数据,所以每当在凌晨的某一时刻当其他程序处理完其中的数据后要删除该表中昨天以及以前的数据,使用delete删除表中的上百万条记录时,MySQL删除速度非常缓慢,每一万条记录需要大概4分钟左右,这样删除所有无用数据要达到八个小时以上,这是难以接受的。
 

查询MySQL官方手册得知删除数据的速度和创建的索引数量是成正比的,于是删除掉其中的两个索引后测试,发现此时删除速度相当快,一百万条记录在一分钟多一些,可是这两个索引其他模块在每天一次的数据整理中还要使用,于是想到了一个折中的办法:

在删除数据之前删除这两个索引,此时需要三分钟多一些,然后删除其中无用数据,此过程需要不到两分钟,删除完成后重新创建索引,因为此时数据库中的数据相对较少,约三四十万条记录(此表中的数据每小时会增加约十万条),创建索引也非常快,约十分钟左右。这样整个删除过程只需要约15分钟。对比之前的八个小时,大大节省了时间。

三、MySQL中的表的删除操作

删除数据的时候根据不同的场景使用不同的方法,比如说删除表中部分数据、删除表的结构、删除所有记录并重置自增ID、批量删除大量数据等,可以使用delete、truncate、drop等语句

批量删除

1) 批量删除少量数据

delete from 表名 where key in(值1,...,值n);

1、先确定需要删除数据的主键或者条件;

2、利用主键删除记录。

2) 分批删除小批量数据

如果你要删除一个表里面的前 10000 行数据,有以下三种方法可以做到:

1、delete from 表名 where 条件 limit 10000;

2、在一个连接中循环执行 20 次 delete from 表名 limit 500;

3、在 20 个连接中同时执行 delete from 表名 limit 500。

三种方法的比较

1、一次占用锁的时间比较长,可能导致其他客户端一致等待资源。

2、分多次占用锁,串行化执行,不占有锁的间隙,其他客户端可以工作。

3、自己制造锁竞争,加剧并发。可能锁住同一记录导致死锁的可能性增大。

注意:

执行大批量删除的时候最好使用limit,否则很有可能造成死锁。

如果delete的where语句不在索引上,可以先找主键,然后根据主键删除数据。

如果需要删除的数据远远大于不用删除的数据

1、先选择不需要删除的数据,并把它们存在一张相同结构的空表里;

2、再重命名原始表,并给新表命名为原始表的原始表名;

3、然后删掉原始表。

如果需要删除超大批量数据

1、先删除表中索引;

2、再删除需要删除的数据;

3、然后重新创建索引。

标签:删除,表名,索引,MySQL,table,数据,delete
From: https://blog.csdn.net/weixin_53709379/article/details/143578989

相关文章

  • 数据库基础知识总结
    一、数据库简介数据库是按照数据结构来组织、存储和管理数据的仓库。它就像是一个精心设计的文件柜,用于存放海量的数据信息,并且能够方便地对这些数据进行操作和检索。在当今数字化的时代,数据库在各个领域都有着至关重要的作用,无论是企业的资源管理、互联网应用的数据存储,还是......
  • C++手撕 --基本数据结构的简单实现(2)
    C++面试手撕代码----基本数据结构的简单实现(2)1.哈希表(unordered_map):#include<vector>#include<iostream>#include<list>//forlist#include<utility>//forpair#include<functional>//forstd::hashusingnamespacestd;template<typ......
  • 如何在DataGrip上使用hive的数据源编写Spark代码
    Spark是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。Spark作为一个计算平台并不是作为一个数据库不像hive以及mysql一样可以直接远程连接DataGrip使用,本篇就展示如何使用DataGrip使用hive作为数据源编写Spark代码查询hive数据库首先确保你的hive以及Spa......
  • 【YOLO目标检测实战 】3.使用YOLO11训练COCO128数据集
    1训练YOLO11模型准备训练数据mkdirdatasets&&cddatasetswgethttps://ultralytics.com/assets/coco128.zipunzipcoco128.zipcd..准备预训练模型mkdirweights&&cdweightswgethttps://github.com/ultralytics/assets/releases/download/v8.3.0/yolo......
  • MySQL 字符串索引和前缀索引
    前缀索引创建前缀索引altertabletaddindexidx_email(email);altertabletaddindexidx_email(email(6));使用前缀索引,定义好长度,可以做到即节省空间,又不用额外增加太多查询成本。区分度建立索引时,区分度(不重复的值)越高越好。selectcount(distanceemail)fromt......
  • SparkSql读取数据的方式
    一、读取普通文件 方式一:给定读取数据源的类型和地址spark.read.format("json").load(path)spark.read.format("csv").load(path)spark.read.format("parquet").load(path)方式二:直接调用对应数据源类型的方法spark.read.json(path)spark.read.csv(path)spark.read.pa......
  • 来自蚂蚁数据研发一面的SQL面试题
    来自蚂蚁数据研发一面:有一张用户贷款信息表dwd_trd_loan_tb_dd,包含uid(用户id)、amt(贷款金额)、ovd_days(逾期天数)、dt(时间分区)以及逾期等级配置表dim_ovd_config_dd,包含ovd_days(逾期天数),user_level(用户风险等级)注意:示例如下,当ovd_days=1且user_level=1,表示用户逾期天数<=1时,用户......
  • 数据同步rsync
    数据同步rsyncRsync本地模式和远程模式1.安装yuminstall-yrsync2.命令语法本地模式rsync参数srcdest1.对文件同步[[email protected]]#rsync-avzP/var/log/messages/tmp/sendingincrementalfilelistmessages3,311,285100%84.50MB/s......
  • SpringBoot小小主持人网站7q3we(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景随着社会对儿童综合素质培养的重视,特别是在语言表达和公众演讲能力方面,小小主持人课程受到越来越多家长和孩子的青睐。为满足这一市场......
  • SpringBoot小区物业管理系统3248a--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义随着城市化进程的加速,小区物业管理面临着越来越复杂和多元的挑战。传统的人工管理方式不仅效率低下,还难以满足业主日益增长的多......