【发布时间】:2023-03-29 17:15:01
【问题描述】:
我有一张有很多记录的表,所以我遇到了慢速 SQL 查询。问题是我正在使用 act_as_paranoid gem,并且没有硬删除记录,只有用 deleted_at 时间戳标记“已删除”记录。我不想完全删除这些记录,因为我需要它们来进行统计。
我的计划是将“已删除”的记录移动到另一个具有相同结构的表中。所以问题是:就 rails 而言,如何克隆表(没有数据)并保持结构同步。我不想重复迁移和模型。
【问题讨论】:
-
学习Partitioning。尤其是分区修剪。
-
看起来像一个解决方案,谢谢。
-
@Akina 找不到如何按空值和非空值分割
-
提供有关当前结构的更多信息(并显示 2-3 个示例行,可能会跳过多余的列)。一般来说,按 null 和 not null 值拆分几乎不需要,但如果确实需要,那么您可以尝试按表达式或生成的列进行分区。
-
@Akina 快速示例。我有 800k 记录,其中 delete_at 列不为空,100k 记录,deleted_at 为空。 SQL 查询类似于 select * from real_estate where price 。有了这个总行数,它运行了约 2 秒。但是当我有大约 10 万条记录时,它应该会快得多。我简化了很多查询,在实际情况下可能存在很多其他字段。
标签: mysql ruby-on-rails database