我在MySQL InnoDB数据库中有几百万个数据库行,需要对其进行清理。看这个例子。
值,并且想要删除一个没有Pickdate的值(空)和两条多余的线(以后是第一次选择)。在上面的示例中,带有*的标记应被删除。SELECT archiveid, clearingid, pickdate FROM tblclearingarchive WHERE clearingid = 30978729 ORDER BY pickdate; +-----------+------------+---------------------+ | archiveid | clearingid | pickdate | +-----------+------------+---------------------+ | 34328367 | 30978729 | NULL | * | 34333844 | 30978729 | 2015-10-27 15:55:30 | <- keep only this row with oldest date | 34438038 | 30978729 | 2016-03-01 10:34:25 | * | 34481472 | 30978729 | 2016-04-20 13:44:19 | * +-----------+------------+---------------------+ 4 rows in set (0.01 sec)
所以我知道受影响字段的clearingid
有关这种SQL更新/删除的外观的任何提示?
有大约3000万行和大约25万行(已知的clearingid)需要清除。
谢谢!
我在MySQL InnoDB数据库中有几百万个数据库行,需要对其进行清理。看这个例子。 SELECT archiveid,clearingid,pickdate从tblclearingarchive WHERE clearingid = ...
这应该按照您的意愿进行。
如果想要第一个,则可以过滤:
DELETE
FROM tblclearingarchive t1
WHERE NOT EXISTS ( SELECT NULL
FROM tblclearingarchive t2
WHERE t1.clearingid = t2.clearingid
AND t1.pickdate < t2.pickdate )