10

您认为哪种设计在 PostgreSQL 上运行得更快?

  1. 制作一个 15 列的 varchars 等表,但将所有 TEXT 列放在一个单独的表中,并通过 fkey 链接返回到该表。假设您要搜索 ID 为“4”的记录,然后将所有行拉回,包括连接表中 TEXT 列中的内容。让我们假设这些表有 500,000 行。

  2. 制作一个 15 列的 varchars 等表,并将您的 TEXT 列包含在同一个表中。再次想象与上面相同的情况——获取记录 ID 4 并提取完整记录,表中有 500,000 行。

我的意思是,在大多数数据库中,按照我的理解,当您深入了解这些 TEXT 列如何工作的物理层时,它们实际上在每一行的表列中保留了一个小 ID,并且该 ID 单独存在,数据库中的独占页块(或其他命名法)。所以,对我来说,似乎选项 B 会运行得更快,因为不需要 fkey 连接的开销,并且因为 TEXT 列实际上并没有占用该给定表中该列中的整数空间——并且该整数是数据库中其他地方页面块的键。

4

2 回答 2

16

PostgreSQL 处理 TEXT 列的方式与其他 DBMS 不同。

从他们的文档中:

提示:这三种类型之间没有性能差异,除了在使用空白填充类型时增加了存储大小,以及在存储到长度受限的列时需要几个额外的周期来检查长度。虽然 character(n) 在其他一些数据库系统中具有性能优势,但在 PostgreSQL 中没有这样的优势。在大多数情况下,应改为使用文本或字符变化。

查看手册

于 2008-12-09T23:27:51.203 回答
3

(B) 是正确的,原因在问题本身中给出。

于 2008-12-08T09:07:54.013 回答