聚集索引 (CI) 查找和非聚集索引 (NCI) 查找有什么区别?一个比另一个表现更好吗?
我问这个的原因是因为我有一个包含 5000 万行和 150 列的表。它有一个名为ID
定义为聚集索引的列。上面还有一个具有相同索引键 ID 和七个include
-d 列的 NCI。在我看来,NC 索引在这里是重复的,可以安全地删除。
所以我想要一些专家的意见/建议,如果它可以安全地丢弃还是应该保持完整?
聚集索引 (CI) 查找和非聚集索引 (NCI) 查找有什么区别?一个比另一个表现更好吗?
我问这个的原因是因为我有一个包含 5000 万行和 150 列的表。它有一个名为ID
定义为聚集索引的列。上面还有一个具有相同索引键 ID 和七个include
-d 列的 NCI。在我看来,NC 索引在这里是重复的,可以安全地删除。
所以我想要一些专家的意见/建议,如果它可以安全地丢弃还是应该保持完整?
具有与聚集索引相同的键 * 的非聚集索引可能仍然有用,因为非聚集索引通常更小且更密集。请记住,聚集索引包括所有行内数据,因此它通常是可能的最宽(最不密集)的索引。
* 相同的键列,以相同的顺序,以相同的方式排序(asc/desc)。
对于单例查找(使用相等谓词到唯一索引的查找),主要区别是假定索引页需要更大的机会来查找已在内存中的单个记录。在所有条件相同的情况下,具有 100 页的非聚集索引比存储在 10,000 页上的聚集索引更有机会。
对于除单例之外的任何其他类型的搜索,也将有一个扫描组件。扫描部分也将受益于更高密度的非聚集索引(每页更多行)。即使页面必须来自持久存储,读取更少的页面也会更快。
您应该检查系统文档,询问添加索引的人,和/或查找代码注释以了解此索引存在的原因。您还需要仔细检查完整的索引定义,包括压缩,并查看索引维护脚本。拥有非聚集索引可能还有其他特殊原因(例如,能够在线重建)。