mysql下,如何加快在一个四五百万条记录的表中删除十几万条数据的速度?

时间:2022-10-11 23:36:31
现在在一个四五百万条记录的表中删除十几万条数据竟然要用掉两分多钟的时间,:(

在where条件用到的字段中建了索引也并没有快多少。。。

希望大家能有好的办法,多谢了,:)

6 个解决方案

#1


是不是机器问题呀?性能跟不上  用索引的话没那么慢吧

#2


服务器配置不算差(双至强,2G内存),sql语句也是最简单的delete from table where col = something...

#3


是不是你这个表中建的索引比较多,删除一个记录的时间与索引数量成正比,想想有比如5,6个索引的话就要删除几倍的数据,为了更快的删除记录,可以增加索引缓存的大小。也可能你如果经常做这样的大量数据删除的话,索引文件容易变的凌乱而效率变低或有可能损坏,如果是这样可以考虑周期性的重建索引(可以考虑在一个低使用时段做个定时程序处理)

#4


where里只使用了一个字段,而这个表只在这个字段上建了索引,没用索引的话,删除也一样很慢,:(;至于索引重建,本身这个表的数据每天都会被清空,我想作用应该不大,:(

#5


每天都清空,那没必要重建什么索引,试着增加索引缓存会不会好些。一天就有4,5百万,数据流量够大的,看看你的表是否可以拆分设计了,按col列拆分(如果col不同值不多的话),这样删的时候直接truncate table 就可以了,这种操作是非常快的,不过这个需要改动程序的。

#6


虽然没有解决问题,但还是要感谢大家的回复,结帖了。。

#1


是不是机器问题呀?性能跟不上  用索引的话没那么慢吧

#2


服务器配置不算差(双至强,2G内存),sql语句也是最简单的delete from table where col = something...

#3


是不是你这个表中建的索引比较多,删除一个记录的时间与索引数量成正比,想想有比如5,6个索引的话就要删除几倍的数据,为了更快的删除记录,可以增加索引缓存的大小。也可能你如果经常做这样的大量数据删除的话,索引文件容易变的凌乱而效率变低或有可能损坏,如果是这样可以考虑周期性的重建索引(可以考虑在一个低使用时段做个定时程序处理)

#4


where里只使用了一个字段,而这个表只在这个字段上建了索引,没用索引的话,删除也一样很慢,:(;至于索引重建,本身这个表的数据每天都会被清空,我想作用应该不大,:(

#5


每天都清空,那没必要重建什么索引,试着增加索引缓存会不会好些。一天就有4,5百万,数据流量够大的,看看你的表是否可以拆分设计了,按col列拆分(如果col不同值不多的话),这样删的时候直接truncate table 就可以了,这种操作是非常快的,不过这个需要改动程序的。

#6


虽然没有解决问题,但还是要感谢大家的回复,结帖了。。