我在 5 个键(列)上有一个聚集索引。我在 2 列上有一个非聚集索引。因为我在一次运行中插入了 2-3 百万行,所以我将 2 列非聚集索引更改为聚集索引,并将 5 列聚集索引更改为 5 列非聚集索引。我的问题。
当使索引聚集(基本上删除并重新创建索引为
clustered
)时,我不需要include
(任何列),因为它是聚集的?我将较少的列索引切换为聚集索引并将大列聚集索引更改为非聚集索引通常是否正确?换句话说,聚簇索引应该简单又小?
如果我切换这两个索引,会有任何性能问题吗?
我在 5 个键(列)上有一个聚集索引。我在 2 列上有一个非聚集索引。因为我在一次运行中插入了 2-3 百万行,所以我将 2 列非聚集索引更改为聚集索引,并将 5 列聚集索引更改为 5 列非聚集索引。我的问题。
当使索引聚集(基本上删除并重新创建索引为clustered
)时,我不需要include
(任何列),因为它是聚集的?
我将较少的列索引切换为聚集索引并将大列聚集索引更改为非聚集索引通常是否正确?换句话说,聚簇索引应该简单又小?
如果我切换这两个索引,会有任何性能问题吗?
除非它是链接表,否则您通常在 1 列上有聚集索引。一般建议是为聚集索引列选择尽可能小的类型(肯定符合您的要求)。拥有许多列不仅会增加大小(每个非聚集索引存储聚集索引的值[包括聚集索引]!),而且还会大大增加外部碎片和降低性能的机会inserts
。因此,我对您的问题的回答。
更新我意识到(感谢 Aaron Bertrand指出)我对将聚集索引包含在非聚集索引中做了相当模糊的声明。绝对正确,每个非聚集索引都包含指向行的行定位器。当表被聚集时,行定位器是聚集索引键。有关聚集索引的更多信息:[1],[2]。