在PostgreSQL中,在同一个表中包含TEXT列是否更快,而不是单独的表?

时间:2008-12-08 00:30:59

标签: performance postgresql join

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

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

  2. 制作15列varchars等表,并在同一个表中包含TEXT列。再次,想象与上面相同 - 抓取记录ID 4并拉出完整记录,表中有500,000行。

  3. 我的意思是,在大多数数据库中,我理解它的方式,当你到这些TEXT列的工作方式的物理层时,它们实际上在每行的表列中保留一个小ID,并且该ID转到数据库中单独的独占页面块(或其他命名法)。所以,对我来说,似乎选项B运行得更快,因为不需要fkey连接的开销,并且因为TEXT列实际上不占用给定表中该列中的整数空间 - 并且该整数是数据库中某个页面块的关键字。

2 个答案:

答案 0 :(得分:16)

PostgreSQL不像其他DBMS一样处理TEXT列。

来自他们的文档:

  

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

Check out the manual

答案 1 :(得分:3)

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