Postgresql
對 ID 使用負整數空間的 Postgres 性能影響
問題
我有一個大表即將用完自動遞增整數主鍵的正整數。我想給自己買幾年的時間來解決底層的架構問題。我想我可以通過將序列更改為
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 類型,沒有進一步的複雜性。