2010-11-03 51 views
7

我问过谷歌,但我仍然感到困惑。索引varchar列

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

2)索引char列VS Varchar列。

感谢

+0

如果你可以支持现有的答案,或者有一些补充,请做到这一点。 – Costa 2010-11-07 09:44:54

回答

4

1 - 指数,如果要查询它,它有足够的选择性。如果它是一个90%的数值相同的列,那就没有多少意义。

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

+1

事实上,索引(N)varchar列工作正常。只有gotcha才会注意900字节的宽度限制 – StuartLC 2010-11-03 15:31:35

+0

有varchar(max)和nvarchar(max)的索引问题,这就是为什么不应该使用它们的原因,除非你打算溢出普通varchar和nvarchar的大小领域。 – HLGEM 2010-11-03 15:44:06

+0

@HLGEM - 你能详细点吗? – JNK 2010-11-03 15:51:29

0

总体性能

理论上/设计,你有一个合乎逻辑的模型,其中,比如,用户名是独一无二的。

但是,在执行时,您知道使用这种方法比使用作为索引更高效的替代“userid”列更昂贵(例如,重音,长度等)。说这个,无论如何你都会有一个名字索引,因为它应该是唯一的。

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

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

最后,我只是使用char/varchar来填充ISO语言或货币代码(DE,EN,GBP,CHF等)。但我的切断而变化,说实话......

4
  • 广告1)是的,900个字节的限制,巨大的按键,大量的索引页,大量的I/O参与,效率低下的索引操作。结论:不要,除非你的varchar最多约50个字符。
  • 广告2)同1 charvarchar之间的真正区别是固定的大小与可变大小(即char(100))总是在数据页100个字节,varchar(100)最多需要100)