请教下:现在公司用的mysql数据库,里面有个记录表,大概有几千万条记录,保留了04年以来的消费记录。现在决定只保留08年以来的,现在需要删除08年以前的消费记录,大概也是几千万条。该表的每条记录都是有提交时间字段,datetime格式。假设表名为a,时间字段为time我现在想用delete from a where time < "2008-01-01 00:00:00";担心几千万条的记录要删除很久,不知道有没有其他好的方法。
调试欢乐多
我忘记说明,time字段已经是主键了。这样是不是就可以了?没有其他更简单的方法了吧
结果
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+----------+-------+---------------+---------+---------+------+---------+-------------+
| Credited | range | PRIMARY | PRIMARY | 8 | NULL | 7959324 | Using where |
+----------+-------+---------------+---------+---------+------+---------+-------------+
我用EXPLAIN显示的结果,看来是已经比较优化了。由于我只是删除该表里的部分数据,所以TRUNCATE TABLE tbl_name 不能使用,那会导致现有数据丢失。另外关于先备份数据,然后删除该表,然后导入新的数据的思路
也存在一点遗憾,因为这个是生成数据库,每时都需要插入新的数据,而这个方法需要暂停下数据库,比较麻烦。最后决定Delete吧,谢谢各位了。