原文:http://blog.csdn.net/songyanjun2011/article/details/7308414
MySQL删除大批量数据
1.删除大表的部分数据
一个表有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、删掉原始表
原文:http://www.2cto.com/database/201211/170796.html
2、删除带索引的表
在My SQL数据库使用中,有的表存储数据量比较大,达到每天三百万条记录左右,此表中建立了三个索引,这些索引都是必须的,其他程序要使用。由于要求此表中的数据只保留当天的数据,所以每当在凌晨的某一时刻当其他程序处理完其中的数据后要删除该表中昨天以及以前的数据,使用delete删除表中的上百万条记录时,MySQL删除速度非常缓慢,每一万条记录需要大概4分钟左右,这样删除所有无用数据要达到八个小时以上,这是难以接受的。
查询MySQL官方手册得知删除数据的速度和创建的索引数量是成正比的,于是删除掉其中的两个索引后测试,发现此时删除速度相当快,一百万条记录在一分钟多一些,可是这两个索引其他模块在每天一次的数据整理中还要使用,于是想到了一个折中的办法:
在删除数据之前删除这两个索引,此时需要三分钟多一些,然后删除其中无用数据,此过程需要不到两分钟,删除完成后重新创建索引,因为此时数据库中的数据相对较少,约三四十万条记录(此表中的数据每小时会增加约十万条),创建索引也非常快,约十分钟左右。这样整个删除过程只需要约15分钟。对比之前的八个小时,大大节省了时间。
相关推荐
- 使用mysqldump工具的--quick选项:在进行大批量数据导入导出时,使用--quick选项可以减少内存消耗,因为mysqldump会逐行读取数据,而不是一次读取所有数据到内存中。 最后,需要特别注意的是,在执行批量删除操作...
在MySQL数据库中,删除大表,尤其是InnoDB存储引擎的表,可能会引发严重的性能问题,尤其是在处理超过30GB的数据量时。这个问题主要是由于MySQL在删除表时需要遍历整个Buffer Pool来清理数据,这可能导致MySQL服务挂...
- **JDBC连接**: 通过JDBC的DriverManager.getConnection()方法建立与MySQL服务器的连接。 - **预编译的Statement或PreparedStatement**: 防止SQL注入,提高性能,并允许动态参数化。 - **结果集(ResultSet)**: ...
这种方法的优点是便于程序对数据集进行多次处理,如遍历、统计和过滤操作。然而,缺点也非常明显:若数据量很大,会迅速耗尽内存资源。 2. 非缓冲查询(Unbuffered Query):通过特定的设置,让PHP在执行查询时,...
在MySQL数据库管理中,有时我们需要清理或重置数据,可能会涉及到大批量删除具有相同前缀的表。批量删除这些表可以提高工作效率,避免手动逐个删除的繁琐过程。本工具正是为了解决这一问题而设计的,它允许用户通过...
5. **数据库配置调整**: 调整MySQL的配置参数,如缓冲池大小、事务大小、连接池设置等,以适应大数据量的写入需求。 6. **使用存储过程**: 将复杂的业务逻辑封装到存储过程中,减少网络往返,提高性能。 7. **数据...
6. **数据库的使用**:当数据量达到百万级别时,使用数据库(如MySQL、Oracle、SQL Server或NoSQL数据库)存储数据更为合适。数据库可以提供高效的查询和数据管理功能,同时支持批量导入导出。 7. **数据预处理**:...
对于大批量删除,`TRUNCATE TABLE`通常比`DELETE`更高效,因为它不记录单个删除操作,而是直接重置表。然而,如果有外键约束,直接使用`TRUNCATE TABLE`可能会导致错误,因为这会违反约束。在这种情况下,可以使用`-...
对于大批量数据操作,这种方式更为高效。 XML的处理则可借助.NET Framework的内置`System.Xml`命名空间。`XmlDocument`类用于加载、解析和操作XML文档。可以使用`XmlNodeReader`或`XDocument`(Linq to XML)来读取...
Pearson 提供针对本书的大批量购买折扣及特殊销售服务。美国境内的企业和政府机构可以通过拨打 1-800-382-3419 或发送邮件至 corpsales@pearsontechgroup.com 联系 Pearson 获取更多信息。对于美国境外的购买需求,...
在大批量插入时,可以考虑使用事务来确保数据的一致性。将所有插入操作包裹在一个BEGIN...COMMIT或START TRANSACTION...COMMIT的事务中,能减少数据库锁定时间,提高并发性能。 5. **批量大小的选取**: 批量插入...
正确的使用索引可以加快查询速度,但在进行大批量数据插入时,过多的索引可能成为性能瓶颈。因此,分析数据的读写比例,适当地创建和删除索引是一个值得考虑的策略。 9. **使用专用的数据导入工具**: 当数据量...
要解决此类慢查询问题,需要结合MySQL的性能调优知识,比如合理安排离线任务的执行时间,避免在业务高峰期间对数据库进行大批量的数据写入操作。在实际操作中,可以将这类高负载操作放在系统负载较低的时段,比如...
在执行大批量删除时,可以分批删除,每次使用`LIMIT`指定较小的数量,这样可以避免因一次性删除太多数据导致的长时间锁定表或服务器资源压力过大。 4. **容错性:** 在不确定删除影响范围时,使用`LIMIT`可以进行...
大批量插入时,可以使用`LOAD DATA INFILE`命令,将数据从文件快速导入到表中。 2. **删除数据(Delete)**: 删除表中的数据使用`DELETE FROM`语句,可以指定删除满足特定条件的记录。例如: ```sql DELETE ...
Z.Dapper.Plus是针对.NET平台的一个高性能、轻量级的数据访问扩展库,它基于Dapper,增强了批量操作、缓存和事务管理等功能,使得数据库交互更为便捷且高效。本示例主要展示了如何使用Z.Dapper.Plus免费版进行数据...
大批量的书籍出现在市场上,人们有了各种各样的选择,与此同时,为了管理大量的图书,仓储的管理问题也就提上了日程,随着图书的大量增加,其管理难度也越来越大,如何优化仓储的日常管理也就成为了一个大众化的课题...
在实际案例中,比如小明误删除了大批线上用户表的数据,这时就可以通过MySQL闪回技术迅速解决问题。DBA不需要重建实例,也不用应用去除错误SQL后的binlog来恢复数据,更不必停机进行维护。通过闪回操作,可以在短短...