我有一个表,我在其中一个INT
类型的列中创建了一个聚簇索引。我想创建一个非聚集索引来提高查询的性能。但是,我没有int
类型的任何列。
因此,我考虑在varchar
类型列上创建非聚簇索引。
在Varchar
类型的列上创建索引会不会很好?它有助于提高查询的性能吗?我知道在varchar
类型列上创建索引并不是一件好事,但只是想知道它是否会提高查询性能。
答案 0 :(得分:10)
在VARCHAR列或列集上创建索引没有任何问题。
关于VARCHAR / INT的性能,与RDBMS中的所有内容一样,它取决于您正在做什么。您可能正在考虑的事实是,在VARCHAR键上聚类表(在SQL Server中)比在单调递增的数字键上聚类效率稍低,并且可能引入碎片。
或者您可能正在考虑在VARCHAR列上编写JOIN的内容 - 确实如此,它在数值类型上比JOIN效率低一点,但效率稍低,没有什么会导致你永远不要加入varchar cols。
这并不意味着您不应该在VARCHAR列上创建索引。 VARCHAR列上的所需索引将提高查询性能,通常为数量级。如果需要VARCHAR上的索引,请创建它。尝试找到一个整数列来创建索引是没有意义的 - 引擎永远不会使用它。