mysql 一次性删除一千万条以上的数据时,可能会出现什么问题?

用的mysql做的数据库,存储需要存放的数据,之前没大量测过压力,今儿看了下有大概一千三百万条的数据,想清空下,结果执行删除数据的脚本,就一直没成功,然后现在那个删除脚本一直在执行,可数据没被清空也没法写进新的信息,看了下tomcat的日志也没报相关错误,问了下朋友说可能是执行删除操作后一次性提交这一千多万条数据造成的超时或者内存泄漏什么的问题,想问下是这个问题不,如何解决?

是delete还没执行完,建议你用Truncate命令。
DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
建议你通过MySQL GUI Tools 5.0工具的MySQLAdministrator.exe,在“服务器连接”中找到正在执行delete的连接,会看到某个进程正在执行delete这个语句,把那个进程杀掉就可以了。
再执行Truncate table 表名,就可以了追问

可是truncate是把所有的数据都删了,我只想删除一部分,虽然是大部分···
truncate我记得是相当于把这个表给drop掉然后重新生成一个,所以不需要逐行扫描,可是我现在不是想全部删除

追答

我看你说想清空下呢。。。你可以分段提交,每删除10000条提交一次,也可以备份数据,先将你不需要删除的数据备份出来,然后删除掉表里的数据,再将备份的数据导入。

追问

分段提交的话 千万数据,每次一万,那得一千来次了? 话说我刚试了下,如果有1000W的数据我只删除几十万时,删除脚本不会一直执行,而且可以进行写入操作,但是删除的数据还在,tomcat报错Lock wait timeout exceeded; try restarting transaction

追答

锁的等待时间太长,可以修改默认参数:innodb_lock_wait_timeout设置锁等待的时间,innodb_lock_wait_timeout = 500
还有个办法,建立一张临时表,然后关联删除。

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-27
删除数据库
最简单的方法,或者保险点先备份数据库,再删除

MySQL 一次性删除一千万条以上的数据时,可能会出现什么问题?
在不考虑数据关联性的问题;那么就只有性能问题了;如果是使用delete那可能要很久;如果是删除整个表的数据 建议使用truncate table 表名,如果不是删除整个表的数据,那就不能使用这个 。其他方法可以使用复制需要的数据建表,然后对新表和旧表更新一下表名,drop table 旧表;...

mysql处理百万级以上的数据时如何提高其查询速度的方法
6、in 和 not in 也要慎用,否则会导致全表扫描,如:select id from t where num in(1,2,3)对于连续的数值,能用 between 就不要用 in 了:select id from t where num between 1 and 37、如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,...

使用MySQL处理百万级以上数据时,不得不知道的几个常识
1、并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段 sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。 2、索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及...

MySQL中删除数据库中的对象时,出现的问题是什么?
权限问题:如果对象确实存在,那么可能是由于权限问题导致你不能删除或修改它。你需要确保你有足够的权限来操作这个对象。备份数据:在执行任何删除或修改操作之前,最好先备份你的数据。这是一个好的安全措施。处理对象:如果对象确实需要被删除或修改,你可以使用相应的命令来完成。例如,如果要删除表"exis...

高效处理数据MySQL应对一亿条数据瓶颈的解决方案mysql一亿条
当数据量达到一亿条数据以上时,在查询数据时,会遇到慢查询的问题。所以,缓存和慢查询优化都是MySQL优化中必不可少的一部分。1. 缓存。缓存是指将查询结果保存在内存中,以便在下一次查询时使用。当查询频繁时,将查询结果保存在缓存中,能够显著提高查询速度以及减轻服务器的负担。一般来说,MySQL提供...

面试问题,mysql处理什么数量级的数据时,性能会急剧下降
如果是5.7的话,是几千万。但是5.7之后基本上就不用考虑数据量的问题了。但是这个问题问的不好,因为性能急剧下降不但但是跟数据量这一个因素有关系。还有机器的配置,比如内存,如果内存放不下索引而把索引放在了虚拟内存上,那么效率就会急剧下降了。还有就是sql建立合适的索引了。

MySQL数据库实现海量数据删除亿级数据轻松处理mysql上亿数据删除
上述代码意思为:删除create_time字段小于’2019-01-01 00:00:00’的数据。3. 通过LIMIT分批删除 当海量数据无法在一次删除语句中完成删除的时候,可以采用分批删除的方式。MySQL通过LIMIT关键字允许我们一次性删除指定行数的数据,通过循环多次执行删除操作,最终将所有符合条件的数据删除完毕。...

mysql 一个表几千万条数据,有没有问题?
肯定是有问题的 估计你用的肯定是免费的社区共享版 这么大的数据量如果想达到非常好的性能 最好花钱了。。。

PHP+mysql插入上千万条数据,导致内存不足,寻求释放内存方法
我给你个思路,利用游览器的刷新机制,每执行10秒刷新一下自动更新下一串数据,一串多少数据,看你的SQL效率而定。就这样一直刷新更新,到结束为止。

mysql,有一张表里面已经有几千万条数据了,网页访问时极其缓慢,如何提高...
10:00'and'2012-11-0100:11:10';查看建立索引前面的返回的结果。假如没有索引的话,explain会显示返回查询全表的数据自然会很慢了。假如用到了索引的话,可以快速的找到需要查询的区间里的数据,往往需要查询的数据量是全表的1\/100,1\/1000,那么这时候花费的时间就是1\/100,1\/1000了。

相似回答