当前位置: 首页 > 面试题库 >

滚动从MySQL删除旧行的最佳方法是什么?

方奕
2023-03-14
问题内容

我发现自己想在许多应用程序中滚动删除早于(x)天的行。在交通繁忙的桌子上最有效地做到这一点的最佳方法是什么?

例如,如果我有一个存储通知的表,而我只想将其保留7天。还是我只想保留31天的高分。

现在,我继续存储存储的纪元时间,并运行一个cron作业,该作业每小时运行一次,并按如下所示增量删除它们:

DELETE FROM my_table WHERE time_stored < 1234567890 LIMIT 100

我这样做直到mysql_affected_rows返回0。

我曾经一次完成所有操作,但是当INSERTS堆积时,导致应用程序中的所有内容挂起了30秒左右。添加LIMIT可以缓解这种情况,但是我想知道是否有更好的方法可以做到这一点。


问题答案:

查看MySQL分区:

通常,通过删除仅包含该数据的分区,可以轻松地从分区表中删除失去其用途的数据。相反,在某些情况下,通过添加一个或多个用于专门存储该数据的新分区,可以大大简化添加新数据的过程。

请参见本节,以获取有关如何应用它的一些想法:

MySQL分区修剪

还有这个:

按日期分区:快速入门



 类似资料:
  • 问题内容: 用jQuery删除表行的最佳方法是什么? 问题答案: 你是对的: 如果您的行中包含,则此方法很好用,例如: 如果没有,则可以使用jQuery的大量选择器中的任何一个。

  • 问题内容: 这是更新mysql SET字段,从字段中删除特定值的最佳方法。 例如。值分别为1,2,3,4,5的字段类别?我想从列表中删除“ 2”: 但是,如果“ 2”是列表中的第一个或最后一个值,该怎么办? 我如何用一个查询处理所有3种情况? 问题答案: 如果您需要从集合中删除的值不能多次出现,则可以使用以下方法: 看到它在这里工作。如果该值可以多次出现,则将删除所有出现的值:

  • 问题内容: 连接字符串上的用户标识不是变量,并且与程序的用户标识(例如,可以是GUID)不同。如果您的连接字符串的用户ID是静态的,您如何审核日志删除? 记录插入/更新/删除的最佳位置是通过触发器。但是使用静态连接字符串,很难记录谁删除了某些内容。有什么选择? 问题答案: 使用SQL Server,您可以使用CONTEXT_INFO将信息传递给触发器。 我在必须使用触发器(例如,表上的多个写入路径

  • 问题内容: 我有一个600万行的SQLite表。 从表中删除是很慢的。 删除表然后重新创建它似乎更快。 我正在使用它进行数据库导入。 删除表会是更好的方法还是有办法快速删除所有数据? 问题答案: 一个很大的不同是DML和DDL。对于数据库事务,这非常重要。最后的结果可能是相同的,但是这些操作有很大的不同。 如果您只是要了解性能,那么可以删除并重新创建表。如果您需要在导入中进行事务处理,则必须注意,

  • 我有URL字符串,如: “http://www.xyz/path1/path2/path3?param1=value1&param2=value2”。 我需要获得这个不带参数的url,所以结果应该是: “http://www.xyz/path1/path2/path3”。 我是这样做的: 有没有更好的办法呢?

  • 问题内容: 问题 在处理产品和订单的Web应用程序中,我想维护前雇员(用户)与其处理的订单之间的信息和关系。我想维护过时产品与包括这些产品的订单之间的信息和关系。 但是我希望员工能够整理管理界面,例如删除前员工,过时的产品,过时的产品组等。 我正在考虑实施软删除。那么,通常如何做到这一点? 我的即时想法 我的第一个想法是在应该可以软删除的每个对象表中粘贴“ TINYINT NOT NULL DEF