Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 在PostgreSQL中,在同一个表中包含文本列比在单独的表中更快吗?_Performance_Postgresql_Join - Fatal编程技术网

Performance 在PostgreSQL中,在同一个表中包含文本列比在单独的表中更快吗?

Performance 在PostgreSQL中,在同一个表中包含文本列比在单独的表中更快吗?,performance,postgresql,join,Performance,Postgresql,Join,您认为哪种设计在PostgreSQL上运行得更快 创建一个包含varchar等内容的15列表,但将所有文本列放在一个单独的表中,并使用fkey链接返回到此表。让我们想象一下,您希望搜索ID为“4”的记录,但随后将所有行向后拉,包括来自联接表中文本列的内容。让我们想象一下这些表有500000行 制作一个由varchars等组成的15列表格,并在同一表格中包含文本列。同样,想象一下与上面相同的情况——抓取记录ID4并拉取完整记录,表中有500000行 我的意思是,在大多数数据库中,按照我的理解,当你

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

  • 创建一个包含varchar等内容的15列表,但将所有文本列放在一个单独的表中,并使用fkey链接返回到此表。让我们想象一下,您希望搜索ID为“4”的记录,但随后将所有行向后拉,包括来自联接表中文本列的内容。让我们想象一下这些表有500000行

  • 制作一个由varchars等组成的15列表格,并在同一表格中包含文本列。同样,想象一下与上面相同的情况——抓取记录ID4并拉取完整记录,表中有500000行


  • 我的意思是,在大多数数据库中,按照我的理解,当你深入到这些文本列的工作原理的物理层时,它们在每一行的表列中实际上保留了一个小的ID,而该ID会进入数据库中一个单独的、独占的页面块(或其他术语)。因此,在我看来,选项B运行得更快,因为不需要fkey联接的开销,而且文本列在给定表的该列中实际占用的空间不超过一个整数,而该整数是数据库中指向其他地方页面块的键。

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

    PostgreSQL与其他DBMS处理文本列的方式不同

    从他们的文档中:

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


    +1感谢您挖掘出我在阅读问题时要做的确切短语!