【问题标题】:column packed save space in PostgreSQLPostgreSQL 中的列填充节省空间
【发布时间】:2021-04-12 11:49:00
【问题描述】:

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

【问题讨论】:

    标签: postgresql database-administration


    【解决方案1】:

    数据类型的长度(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。

    【讨论】:

    • 还是一头雾水。那么为什么在这种情况下:下一列的对齐比当前需要填充的对齐更大?
    • 我补充了一些解释。
    猜你喜欢
    • 2011-02-27
    • 2017-09-05
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多