字符可变索引开销和长度限制

3 postgresql performance index disk-space btree

我对字符变化列有一个独特的限制,该列的长度通常约为 600,但可以达到 1000 万。

我已经阅读了B-Trees,但我无法确定索引将消耗多少磁盘空间,或者如此大的值是否会阻止索引高效运行。

具有如此大长度的字符变化列对 B 树索引的磁盘空间和时间有何影响?

Erw*_*ter 9

在 Postgres 中,唯一约束是通过唯一的B 树索引实现的根据文档:

添加唯一约束将自动在约束中使用的列或列组上创建唯一的 btree 索引。

索引使用与表相同的基本存储机制:数据页数组。索引有一些次要的附加功能。根据文档:

在表格中,一个项目就是一行;在索引中,项目是索引条目。

每个表和索引都存储为一个固定大小的页面数组(通常为 8 kB,尽管在编译服务器时可以选择不同的页面大小)。

索引条目的最大大小是数据页的三分之一,我在此引用 Peter Eisentraut:
PostgreSQL 主键长度限制

那是2730 字节(或更少)。这意味着您的UNIQUE约束是不可能的

我会考虑添加一个带有哈希值的冗余列,并在上创建一个唯一索引。
您可以使用内置函数md5()或更有效的方法来获得巨大的价值。

这是一个关注性能的相关解决方案:
索引最大行大小错误

  • 我想知道较新的 Postgres 版本是否发生了变化,因为我可以使用唯一索引将具有 10000 个(随机)字符的文本值插入到列中:http://rextester.com/ZDYS66763 (3认同)
  • @a_horse_with_no_name:确实很有趣。值得一个新问题:https://dba.stackexchange.com/q/217087/3684(我想我找到了答案。) (2认同)

归档时间:

查看次数:

5318 次

最近记录:

11 年,11 月 前