You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL pageinspect扩展bt_page_stats的avg_item_size含义及差异疑问

B树索引avg_item_size差异问题解答

1. bt_page_stats中avg_item_size的定义

该指标是pageinspect扩展针对PostgreSQL B树索引页的统计值,含义是当前索引页内所有索引条目的平均字节长度,计算逻辑为索引页内所有索引项的总占用字节数除以索引项总数量。

2. integer类型索引avg_item_size大于text类型的原因

这是PostgreSQL 12及以上版本默认开启的*B树索引去重(deduplication)*优化导致的:

  • 当某个索引键值存在大量重复行时,PostgreSQL不会为每一行都生成独立的「索引键+单个TID(6字节行标识符)」索引项,而是将相同键值对应的所有TID整合成一个posting list,合并为单个索引项存储,大幅降低整体索引的空间占用。
  • 你观察到的长度为808的索引项,就是合并了数百个TID的posting list项,单条长度远大于普通独立索引项,拉高了平均长度。

3. 关于TID存在性的疑问

不存在「integer索引有TID、text索引没有TID」的情况,所有B树索引的有效条目都会存储对应行的TID:

  • 你的text字段索引基数(去重后值的数量)极高,几乎没有重复的索引键,不会触发去重合并,所有索引项都是「text值+单个TID」的独立结构,因此你看不到批量存储的TID列表,单条索引项长度更小,最终平均长度反而低于存在大量合并项的integer索引。

内容的提问来源于stack exchange,提问作者Ivan Kamas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:54:05