您认为哪种设计在PostgreSQL上运行得更快?
制作一个15列的varchars等表,但将所有TEXT列放在一个带有fkey链接的单独表中,并返回到该表.让我们假设您想要搜索ID为"4"的记录,然后将所有行拉回来,包括连接表中TEXT列的内容.让我们假设这些表有500,000行.
制作15列varchars等表,并将TEXT列包含在同一个表中.再次,想象与上面相同 - 抓取记录ID 4并拉出完整记录,表中有500,000行.
我的意思是,在大多数数据库中,我理解它的方式,当你到这些TEXT列的工作方式的物理层时,它们实际上在每行的表列中保留一个小ID,并且该ID转到一个单独的,数据库中的独占页面块(或其他命名法).所以,对我来说,似乎选项B运行得更快,因为不需要fkey连接的开销,并且因为TEXT列实际上不占用给定表中该列中的整数空间 - 并且该整数是数据库中某个页面块的关键字.
PostgreSQL不像其他DBMS一样处理TEXT列.
从他们的文档:
提示:除了使用空白填充类型时增加的存储大小,以及在存储到长度受限的列中时检查长度的一些额外周期之外,这三种类型之间没有性能差异.虽然character(n)在其他一些数据库系统中具有性能优势,但它在PostgreSQL中没有这样的优势.在大多数情况下,应该使用文本或字符变化.
查看手册