varchar字段的声明大小对PostgreSQL有影响吗?

ibz*_*ibz 29 postgresql performance varchar diskusage

从性能的角度来看,VARCHAR(100)是否比VARCHAR(500)更好?磁盘使用情况怎么样?

今天谈论PostgreSQL,而不是历史上的一些数据库.

the*_*jxc 31

它们完全相同.

从PostgreSQL文档:

http://www.postgresql.org/docs/8.3/static/datatype-character.html

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

他们在这里讨论char(n),varchar(n)和text(= varchar(1G))之间的差异.官方的故事是varchar(100)和text(非常大的varchar)之间没有区别.

  • 再检查一遍.他们指的是三个相同的.即varchar(n)的性能与text相同,即varchar(LOTS).三种类型之间的唯一区别是填充和长度约束.在varchar(100)和varchar(500)之间都没有应用,所以他们说它们是相同的. (3认同)
  • 我说的是 VARCHAR(m) 与 VARCHAR(n),而不是 VARCHAR 与 CHAR,这就是您所指的。 (2认同)
  • 是的,他们确实提到了所有三个,但他们只坚持两个.我实际上是在问这个问题,因为我对文档中的特定段落不满意,我正在寻找更有见地的解释.不,TEXT*与VARCHAR(LOTS)不同*.TEXT存储在行外.至少AFAIK. (2认同)

MkV*_*MkV 9

TEXT /与VARCHAR相同,没有明确的长度,即文本

"短字符串(最多126个字节)的存储要求是1个字节加上实际字符串,其中包括字符空格填充.较长的字符串有4个字节的开销而不是1.长字符串由系统压缩自动,因此磁盘上的物理要求可能会更少.很长的值也存储在后台表中,这样它们就不会干扰对较短列值的快速访问.在任何情况下,可以存储的最长字符串是关于1 GB."

同时指VARCHAR和TEXT(因为VARCHAR(n)只是TEXT的限制版本).人为地限制您的VARCHARS没有真正的存储或性能优势(开销是基于字符串的实际长度,而不是基础varchar的长度),除了可能用于比较通配符和正则表达式(但在开始的级别)不过,你应该看看PostgreSQL的全文索引支持.


rfu*_*sca 8

varchar(m)和之间没有区别varchar(n)..

http://archives.postgresql.org/pgsql-admin/2008-07/msg00073.php

虽然有一个区别varchar(n),textvarchar(n)有一个内置约束必须检查,实际上有点慢.

http://archives.postgresql.org/pgsql-general/2009-04/msg00945.php