列压缩节省了PostgreSQL中的空间



基于本教程,我们可以看到相同整数大小的列对齐将节省空间。太好了。但我还是很困惑。它是基于数据类型对齐还是数据类型大小?我相信这是基于数据类型大小,而不是数据类型。

数据类型的长度(pg_type中的列typlen(决定了值将使用多少空间,但它与列之间的填充或由于对齐而浪费的空间无关(列typalign(。

如果下一列的对齐方式比当前列大,则只会浪费空间,并且需要填充字节来填充其间的空间。

例如:

CREATE TABLE test (
x boolean NOT NULL,
y boolean NOT NULL,
z integer NOT NULL
);

每个boolean具有1字节的对齐和长度,而integer具有4字节的对齐。所以字节看起来是这样的:

┌──────────────┐
│       x      │
├──────────────┤
│       y      │
├──────────────┤
│ padding byte │
├──────────────┤
│ padding byte │
├──────────────┤
│       z      │
├──────────────┤
│       z      │
├──────────────┤
│       z      │
├──────────────┤
│       z      │
└──────────────┘

第一列从最大对齐的偏移量开始(也就是说,地址可以被八整除(。列z必须从可被4整除的地址开始,因此需要两个填充nyte。

最新更新