【发布时间】:2021-04-12 11:49:00
【问题描述】:
基于此tutorial,我们可以看到相同整数大小的列对齐将节省空间。这是非常好的。但我还是很困惑。它是基于数据类型对齐还是数据类型大小?我相信基于数据类型大小,而不是数据类型。
【问题讨论】:
标签: postgresql database-administration
基于此tutorial,我们可以看到相同整数大小的列对齐将节省空间。这是非常好的。但我还是很困惑。它是基于数据类型对齐还是数据类型大小?我相信基于数据类型大小,而不是数据类型。
【问题讨论】:
标签: postgresql database-administration
数据类型的长度(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 │
└──────────────┘
第一列从最大对齐的偏移量开始(即地址可被 8 整除)。列 z 必须从可被 4 整除的地址开始,因此需要两个填充 nytes。
【讨论】: