【发布时间】:2022-01-27 12:10:03
【问题描述】:
我有一个包含大量数据的表格,其中包含“创建时间”列。在此数据库中,在过去 3 年中创建了超过 12 000 000 行。我需要一次删除超过 3 个月的数据,一次 1000 个。从最旧的数据开始还是从最新的数据开始更好?
我通过灵活的搜索来做到这一点。这是最安全的方法,因为我们在我们的平台中使用我们自己的 ORM,并且与这些数据一起,其他有关系的数据将被删除。我不能全部复制。我不能做分区。只有一个问题:如何更快? mysql 是否以某种方式针对此类查询进行了优化?
【问题讨论】:
-
如果您能够离线完成,我建议将不到 3 个月的数据复制到新表中,删除旧表并重命名新表。展望未来,我建议按日期将数据划分为多个段,这样您就可以简单地删除一个分区而不是删除单个行。
-
请添加表定义以便我们查看索引。定义大量数据并预测 11 年 9 个月与 3 个月的数据分布。我希望您没有要删除的数据的 FK..
-
是从最旧的数据开始还是从最新的数据开始更好? 最好删除数据而不进行任何排序,只检查日期,直到匹配“太旧的行” "条件缺席。 PS。不要在条件中使用 NOW(),仅使用 CURRENT_DATE。聚苯乙烯。为了进一步简化清理过程,您可以考虑按日期分区 - 这允许通过简单的旧分区删除来删除旧行。
-
我通过灵活搜索来做到这一点。这是最安全的方法,因为我们在我们的平台中使用我们自己的 ORM,并且与这些数据一起,其他有关系的数据将被删除。我不能全部复制。我不能做分区。只有一个问题:如何更快? mysql 是否以某种方式针对此类查询进行了优化?
-
如果您只想通过 ORM 工具执行删除,那么询问 MySQL 级别的任何优化是没有意义的。它将严格执行您的 ORM 将发送给它的查询。 只有一个问题:它会如何更快?在你的情况下 - 没有区别。