我试图了解列顺序如何最小化 PostgreSQL 中的表大小。
Example:
CREATE TABLE test (
column_1 int
,column_2 int
,column_3 bigint
,column_4 bigint
,column_5 text
,column_6 text
,column_7 numeric(5,2)
,column_8 numeric(5,2)
,column_9 timestamp
,column_10 boolean
,column_11 boolean
);
INSERT INTO test
VALUES(1,1,1,1,'test','test_1',12,12,current_timestamp,true,false);
SELECT pg_column_size(test.*) FROM test;
pg_column_size
----------------
82
(1 row)
元组大小:
元组头的 23 字节开销 + NULL 位图的 1 字节开销,因此:
24+4+4+8+8+5+7+5+5+8+1+1=80,但实际元组大小为 82。
是否有 2 个字节的额外开销?
我理解下面链接中给出的示例:
PostgreSQL 中的计算和节省空间 https://stackoverflow.com/questions/2966524/calculating-and-saving-space-in-postgresql/7431468#7431468
如果我们删除column_8 numeric(5,2)
那么元组大小也保持不变,即:82。
我已重新排序表以最小化元组大小并给出 80。
CREATE TABLE test (
column_3 bigint
,column_4 bigint
,column_9 timestamp
,column_1 int
,column_2 int
,column_10 boolean
,column_11 boolean
,column_7 numeric(5,2)
,column_8 numeric(5,2)
,column_5 text
,column_6 text);
INSERT INTO test
VALUES(1,1,current_timestamp,1,1,true,false,12,12,'test','test_1');
SELECT pg_column_size(test) FROM test;
pg_column_size
----------------
80
PostgreSQL 中的列顺序有什么建议吗?