43

从性能的角度来看有什么VARCHAR(100)比这更好的吗?VARCHAR(500)磁盘使用情况如何?

今天谈论 PostgreSQL,而不是历史上的某个数据库。

4

3 回答 3

40

它们是相同的。

从 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 (very large varchar) 之间没有区别。

于 2009-07-01T03:06:51.703 回答
10

varchar(m)varchar(n)..没有区别

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

两者之间是有区别的varchar(n)text但是,varchar(n)有一个必须检查的内置约束,实际上速度有点慢。

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

于 2009-07-02T05:17:10.260 回答
9

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

“短字符串(最多 126 字节)的存储要求是 1 字节加上实际字符串,其中包括字符情况下的空格填充。较长的字符串有 4 字节开销而不是 1。长字符串由系统压缩自动,因此对磁盘的物理要求可能会更少。非常长的值也存储在后台表中,因此它们不会干扰对较短列值的快速访问。无论如何,可以存储的最长可能字符串约为1 GB。”

指 VARCHAR 和 TEXT(因为 VARCHAR(n) 只是 TEXT 的有限版本)。人为地限制您的 VARCHARS 并没有真正的存储或性能优势(开销基于字符串的实际长度,而不是底层 varchar 的长度),除了可能与通配符和正则表达式进行比较(但在开始的级别重要的是,您可能应该查看 PostgreSQL 的全文索引支持之类的东西)。

于 2009-07-01T10:12:34.483 回答