索引varchar列

时间:2010-11-03 15:25:26

标签: sql sql-server tsql

我问谷歌,但我仍感到困惑。

1)索引Varchar列是否存在问题。当我不应该,当我应该

2)索引一个char列VS Varchar列。

由于

3 个答案:

答案 0 :(得分:4)

1 - 如果你正在查询它并且它有足够的选择性,请将其编入索引。如果它是一个90%的值相同的列,则没有多大意义。

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

答案 1 :(得分:4)

  • ad 1)是的,900字节限制,大量密钥,大量索引页,涉及大量I / O,索引操作效率低下。结论:除非你的varchar最多约50个字符,否则不要
  • ad 2)与1.相同1. charvarchar之间的真正区别是固定大小与可变大小(即char(100))在数据页中始终占用100个字节, varchar(100)最多需要100)

答案 2 :(得分:0)

一般表现

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

然而,在实现时,你知道使用这个是昂贵的(情况,重音,长度等)与使用代理“userid”列相比,后者作为索引更有效。这么说,无论如何你都有一个名字索引,因为它应该是唯一的。

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

作为没有FK的表的单个索引,那么它既不在这里也不在那里。

最后,我只是将char / varchar用于ISO语言或货币代码(DE,EN,GBP,CHF等)。但我的截止不一样诚实......