我在我的应用程序中使用VARCHAR,发现了一些特别令人困惑的东西......为什么我需要定义一个长度为例如VARCHAR(50)或VARCHAR(1000)的SQL VARCHAR列?这个长度约束允许我定义我的首选字符串长度的唯一目的是什么? VARCHAR(50)和VARCHAR(1000)之间是否有任何性能差异?
答案 0 :(得分:2)
这完全取决于您的DBMS的内部。例如,如果索引varchar列,则几乎可以肯定将keypart设置为最大大小。
这是因为索引必须非常高效,并且你不想在这种情况下使用可变长度字段,因为它可能会减慢你的速度。
即使在数据库的数据区域,您可能会发现它只允许最大的大小。我已经看到过只是将行中的指针存储到磁盘堆上的提议,但这意味着每行有两个磁盘读取,我看不出这是大规模性能的一个非常好的选择。
列的大小会影响性能,例如一次可以读取多少条记录,n-ary树索引节点中可以容纳多少条等等。
答案 1 :(得分:0)
VARCHAR(N)
基本上等同于TEXT CHECK (LENGTH(x) <= N)
。声明最大尺寸没有性能优势。