索引一个varchar列

7

我向谷歌求助,但仍感到困惑。

1)在索引Varchar列时是否存在问题?何时应该做,何时不应该做。

2)索引char列与Varchar列的区别。

谢谢。


如果您可以支持现有答案或有其他需要补充的内容,请务必执行。 - Costa
3个回答

5

1 - 如果您要查询某个字段并且它足够具有选择性,请将其索引。如果该列的90%值相同,则没有太多意义。

2 - 这不是一个问题,但我猜您想知道是否应该这样做。是的,如果您查询它并且符合上述条件。


1
确实,对(N)varchar列进行索引是可以正常工作的。唯一需要注意的是要注意900字节宽度限制。 - StuartLC
varchar(max)和nvarchar(max)存在索引问题,因此除非您打算使普通的varchar和nvarchar字段溢出,否则不应使用它们。 - HLGEM
你不能单独在nvarchar(max)或varchar(max)上创建索引。它可以成为另一个索引的一部分,但不能成为索引的主要查找部分。这些数据类型仅用于大型数据块,而不是需要索引的字段类型。许多人认为使用它们比花时间正确调整列大小更容易,结果他们最终得到了一个无法索引的混乱数据库,速度比蜗牛还慢。 - HLGEM
引用Books Online的话:“LOB数据类型ntext、text、varchar(max)、nvarchar(max)、varbinary(max)、xml或image的列不能被指定为索引的关键列。” - HLGEM
@HGLEM - 当我想到这一点时,它是有道理的(为什么它们会无法索引),但我没有意识到这是一个限制。谢谢你提供的信息。 - JNK

4
  • 广告1)是的,有900字节限制,巨大的键,许多索引页面,许多涉及I/O的操作,索引操作效率低下。结论:除非你的varchar最多只有50个字符,否则不要使用。
  • 广告2)和1一样。 charvarchar的真正区别在于固定大小与可变大小(即char(100)在数据页中始终占用100个字节,而varchar(100)最多占用100个字节)。

0

一般性能

在理论/设计中,您有一个逻辑模型,例如,用户名是唯一的。

然而,在实现时,您知道使用它是昂贵的(大小写、重音、长度等),与使用更有效的索引作为替代的“用户ID”列相比。话虽如此,您仍会在名称上建立索引,因为它应该是唯一的。

区别在于您使用此索引的位置:如果它在子表中作为外键列,则不是一个好主意。或者作为聚集索引。

对于没有FK的表的单个索引,那么这既不是这里也不是那里。

最后,我只会使用char / varchar之类的东西来表示ISO语言或货币代码(DE,EN,GBP,CHF等)。但是我的截止时间老实说是不同的...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接