我有一个要求,必须将过去 N 天的记录从一个表移动original_table
到另一个表。new_table
下面是我执行此操作的基本脚本的一个小示例。
while True:
result = INSERT INTO new_table (SELECT * FROM original_table WHERE (crdb_internal_expiration > (current_timestamp() + INTERVAL 'X days')) ORDER BY (unique_id) DESC LIMIT batch_limit OFFSET starting_point);
if result.rowcount < batch_size:
break
offset += batch_size
问题是我们必须及时在表之间移动记录,目前移动 LIMIT 为 10_000 的记录每次大约需要 30 秒。假设过去 2 天我们有大约 200 万条记录,我们希望限制停机时间。
我们这样做的原因是因为我们需要在表中使用列族,但 cockroachdb 不允许我们更改现有表来添加新的列族(如果它还没有)。
有什么方法可以优化这个查询,使其运行得更快吗?也许不使用OFFSET
并跟踪记录id
会更快?
AND id > last_processed_id
ORDER BY id DESC
LIMIT 100;
cockroachdb 版本为 23