我有一个大约有 100,000,000 行的表。我们需要删除其中大约 80,000 个进行修复。
为了防止停机,我有一个作业设置来获取需要删除的记录,然后以 100 条为单位处理删除。但是,即使处理前 100 条记录也需要很长时间。
此表上没有主 ID,我可以可靠地引用每一行的唯一方法是使用一个名为tx
varchar(250)` 的唯一列(尽管该字段永远不会超过 18-20 个字符)。我在这一行上创建了一个索引,但仍然需要大约 4-6 秒来选择一行。
似乎是 varchar 导致了问题,所以我想添加一个新id bigint serial
列,但试图弄清楚这样做是否会锁定表,直到它能够填充所有 ID。
我知道alter table add column
只要没有默认值,它就是非阻塞的。但是 Serial 算作default
价值吗?
我在文档中找不到这个问题的答案。我们在 Postgres 12 上。