我有一堆没有主键的表。有些确实已经有一个非聚集索引,该索引由主键(ClaimID、LineNBR)组成。使用的列当前设置为接受 NULL,因此我需要更改它。为此创建主键是否有价值,是否会使在相同列上的非聚集索引变得多余?最好只留下非聚集索引,删除非聚集索引并使其成为主键,还是添加主键并保留非聚集索引?
我有一堆没有主键的表。有些确实已经有一个非聚集索引,该索引由主键(ClaimID、LineNBR)组成。使用的列当前设置为接受 NULL,因此我需要更改它。为此创建主键是否有价值,是否会使在相同列上的非聚集索引变得多余?最好只留下非聚集索引,删除非聚集索引并使其成为主键,还是添加主键并保留非聚集索引?
表使用模式是您是否需要它们的主要驱动因素。在 OLTP 工作负载中,您通常确实需要它们。如果您只是将数据转储到这些表中并在大型 ol' 扫描中报告它们,那么它们的价值可能较低。
虽然您可能根本不需要主键,但添加聚簇索引可以帮助您避免表是堆(没有聚簇索引的表)时出现的问题。
同样,使用模式最重要:如果您从不更新或删除存储在堆中的数据,就不会遇到这些特定问题:
转发的获取
如何修复转发的记录
识别并更正 SQL Server 转发的记录
如何在 SQL Server 堆中读取和处理转发的记录
转发和转发记录,以及反向指针大小
俘虏页面
在堆表上删除
堆、删除和乐观隔离级别
SQL Server:堆中的 DELETE 操作
SQLskills SQL101:为什么我的堆中有一堆空页?