聚簇索引与非聚簇索引的使用

Clustered Index Vs Non-Clustered Index Usage

我是 T-SQL 中查询优化的新手,我对其中一种实现有点困惑。

这里已经解释了这个场景:我有这个 table (Table A),它正在发生常规插入,没有更新 - 仅在数据移动到另一个时插入 table (Table B) 基于 Table A (Col-1) 中特定列的过滤器。

我关注的 Table A 中的两列是 Col-1(标识列)和 Col-2(nvarchar(20) -- 并且有重复项)。

Col-2 是我在将数据从 Table A 移动到 Table B 时过滤我的记录的地方。

我是否应该在 Col-1 上定义一个聚簇索引,在 Col-2 上定义一个非聚簇索引,因为我在 Col-2 上进行过滤;或者我应该只在 Col-2 上定义一个非聚集索引以加快查询性能?

或者我应该将 table 保留为堆并仅在 Col-2 上定义非聚集索引。

此外,定义聚簇索引并将 table 存储为 B 树会降低性能,因为我们将数据附加到 Table -A 每周插入。

感谢您的帮助。

正如这里的许多人所说,如果不进行测试,很难明确地说出什么是最佳解决方案。但是,您说在选择移动数据之前要按 col2 进行过滤。根据这些记录的移动百分比,我建议从对唯一 col1 进行聚类开始。然后在 col2 上创建一个非聚集索引。非聚集索引的一个优点是您可以使用 WHERE 子句使其成为过滤索引。因此,例如,如果只有 10% 的记录具有来自您关心的几个选择的 col2 值,则索引 'WHERE col2 IN (val, val2, val3) 将小 10 倍,因此访问速度更快。

如果您走这条路,请确保 SELECT 中的 WHERE 子句与您在索引上指定的 WHERE 子句相匹配。