在varchar类型的列上创建非聚簇索引是否合适?

时间:2012-12-26 13:48:06

标签: sql-server

我有一个表,我在其中一个INT类型的列中创建了一个聚簇索引。我想创建一个非聚集索引来提高查询的性能。但是,我没有int类型的任何列。

因此,我考虑在varchar类型列上创建非聚簇索引。

Varchar类型的列上创建索引会不会很好?它有助于提高查询的性能吗?我知道在varchar类型列上创建索引并不是一件好事,但只是想知道它是否会提高查询性能。

1 个答案:

答案 0 :(得分:10)

在VARCHAR列或列集上创建索引没有任何问题。

关于VARCHAR / INT的性能,与RDBMS中的所有内容一样,它取决于您正在做什么。您可能正在考虑的事实是,在VARCHAR键上聚类表(在SQL Server中)比在单调递增的数字键上聚类效率稍低,并且可能引入碎片。

或者您可能正在考虑在VARCHAR列上编写JOIN的内容 - 确实如此,它在数值类型上比JOIN效率低一点,但效率稍低,没有什么会导致你永远不要加入varchar cols。

这并不意味着您不应该在VARCHAR列上创建索引。 VARCHAR列上的所需索引将提高查询性能,通常为数量级。如果需要VARCHAR上的索引,请创建它。尝试找到一个整数列来创建索引是没有意义的 - 引擎永远不会使用它。