簡體   English   中英

將序列列添加到具有 100,000,000 行的現有表

[英]Adding a Serial Column to existing table with 100,000,000 rows

我有一個大約有 100,000,000 行的表。 我們需要刪除其中大約 80,000 個以進行補救。

為了防止停機,我有一個作業設置來獲取需要刪除的記錄,然后以 100 條為單位處理刪除。但是,即使處理前 100 條也需要永遠。

這張表上沒有主 ID,我可以可靠地引用每一行的唯一方法是使用一個名為tx的唯一列,它是一個 varchar(250)`(盡管該字段的長度永遠不會超過 18-20 個字符)。 我在這一行上創建了一個索引,但仍然需要大約 4-6 秒到 select 一行。

似乎是 varchar 引起了問題,所以我想添加一個新的id bigint serial列,但我試圖弄清楚這樣做是否會鎖定表,直到它能夠填充所有 ID。

我知道只要沒有默認值, alter table add column就是非阻塞的。 但是 Serial 算作default值嗎?

我在文檔中找不到這個問題的答案。 我們在 Postgres 12 上。

添加具有序列生成值的新列將重寫表,這將導致停機。 小心點,它可以在沒有停機時間的情況下完成,但是如果您已經有一個帶有唯一索引但不包含 NULL 值的varchar列,那么這很復雜並且不值得付出努力。

搜索具有現有索引的行應該是幾毫秒的事情。 如果不是,那就是您必須解決的問題。 您可以為問題的查詢添加EXPLAIN (ANALYZE, BUFFERS) output 嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM