我有一个包含几列的表,其中两个重要的是 appid 和 fileid。他们一起组成了桌子的PK。该表的一个典型用例是有多少文件包含 appid x,或者哪个 appid 最受欢迎。这些查询也将经常仅在文件的子集上运行,而不是在所有文件上运行。两列都不是唯一的。
基于此,我觉得聚集索引的最佳选择是 AppId。但是,由于将两列都设置为 PK 会产生额外的非聚集索引,并且 appid 缺乏唯一性(会有很多重复)意味着无论如何它都需要一个 uniquifier 列,所以只说PK 是聚集的而不是指定另一个聚集索引?假设我首先在 PK 中指定 AppId,它是否会将 diagnosticfileid 视为幕后的唯一性并以这种方式为我提供最佳性能?
编辑:我最初忘记提到的一件重要的事情是 APPId 不会稳步增加或任何东西,因此表格中间会有插入。我在想我可以通过使用填充因子来防止一些问题,但是表格会变得很大,所以我不知道这会有多大帮助。
此外,它会经常插入,但不会一次插入大块。可能是每小时几千行。确实没有任何价值可以可靠地增加并且在这方面对于聚集索引来说是一个不错的选择,但我不确定这有多大的意义。我可以添加一个 id 只是为了具有良好的集群价值,但我觉得这会减慢选择速度。