Postgresql

對 ID 使用負整數空間的 Postgres 性能影響

  • July 6, 2022

問題

我有一個大表即將用完自動遞增整數主鍵的正整數。我想給自己買幾年的時間來解決底層的架構問題。我想我可以通過將序列更改為min(integer).

這裡有沒有我不知道的小精靈可能會導致性能問題?我們沒有在查詢中從 ID 中訂購任何地方,但我想知道是否存在關於數據如何物理儲存在磁碟上的問題,這可能會給我帶來麻煩。

我提出的解決方案

alter sequence alert_send_id_seq minvalue -2147483646;
alter sequence alert_send_id_seq restart with -2147483646;

表定義

CREATE TABLE public.alert_send (
   id integer NOT NULL,
   user_id integer,
   date timestamp without time zone,
   sent boolean
);

CREATE SEQUENCE public.alert_send_id_seq
   START WITH 1
   INCREMENT BY 1
   NO MINVALUE
   NO MAXVALUE
   CACHE 1;

ALTER TABLE ONLY public.alert_send ALTER COLUMN id SET DEFAULT nextval('public.alert_send_id_seq'::regclass);

ALTER TABLE ONLY public.alert_send
   ADD CONSTRAINT alert_send_pkey PRIMARY KEY (id);

沒有其他問題。當您用完 int 範圍時,使用負值是爭取時間的最快方法。在 DBA 實踐中很少使用,因為很難確保不存在按 id 排序很重要的查詢,或者應用程序本身不會對負值感到驚訝。

postgresql 中整數類型的內部格式是 C 語言中的普通 int32 類型,沒有進一步的複雜性。

引用自:https://dba.stackexchange.com/questions/314129