什么是附加到VARCHAR的大小指标?

时间:2011-02-15 03:31:28

标签: c# asp.net sql-server-2008

我在我的应用程序中使用VARCHAR,发现了一些特别令人困惑的东西......为什么我需要定义一个长度为例如VARCHAR(50)或VARCHAR(1000)的SQL VARCHAR列?这个长度约束允许我定义我的首选字符串长度的唯一目的是什么? VARCHAR(50)和VARCHAR(1000)之间是否有任何性能差异?

2 个答案:

答案 0 :(得分:2)

这完全取决于您的DBMS的内部。例如,如果索引varchar列,则几乎可以肯定将keypart设置为最大大小。

这是因为索引必须非常高效,并且你不想在这种情况下使用可变长度字段,因为它可能会减慢你的速度。

即使在数据库的数据区域,您可能会发现它只允许最大的大小。我已经看到过只是将行中的指针存储到磁盘堆上的提议,但这意味着每行有两个磁盘读取,我看不出这是大规模性能的一个非常好的选择。

列的大小会影响性能,例如一次可以读取多少条记录,n-ary树索引节点中可以容纳多少条等等。

答案 1 :(得分:0)

  • SQLite:完全忽略大小限制。
  • PostgreSQL:VARCHAR(N)基本上等同于TEXT CHECK (LENGTH(x) <= N)。声明最大尺寸没有性能优势。
  • MySQL:确定字符串长度是存储为一个字节还是两个字节。
  • Oracle:较大的大小限制为performance disadavantage
  • MS SQL Server:无法索引大于900字节的VARCHAR列。