我有一个父表和一个子表。
父表具有聚簇索引作为主键,具有增量值(ParentID
)。子表还有一个聚簇索引作为主键,具有增量值(ChildID
)
主键Parent.parentID
与child.parentID
作为外键有关。
我根据以下查询加入这两个表。
Select ....
Join on parent.parentID = child.parentID
where parent.personalNumber = 197608134356 <-- varchar
现在,我应该
parent.personalNumber
上添加非聚集索引,因为它位于where子句中?child.parentiD
上添加非聚集索引以加快连接速度?这意味着我将非聚集索引放在聚簇索引表上。
我预计随着时间的推移父母和孩子都会有很多行。将有插入和选择。没有更新或删除
由于 / s的
答案 0 :(得分:0)
您可以在一个表上只有一个聚簇索引,并且您已经在ParentId上有一个用于Parent表,一个用于Child表上的ChildId,两者都是增量值,这是好的,主键也是好的(不是必需的) ,您可以选择在其他列上使用聚簇索引,在pk上选择非聚集索引。
你的设计很好看。您必须在搜索列上添加非聚簇索引(parent.personalNumber和其他如果有的话)和外键,它通常会有所帮助。
答案 1 :(得分:0)
将聚集索引用于PK,除非您有令人信服的理由不这样做。
该联接仍然可以在孩子上使用群集复合PK 检查执行计划 - 如果连接不使用聚簇索引,我会非常惊讶
personalNumber上的索引应该有助于
答案 2 :(得分:0)
如果您正在设计具有许多并发客户端的高性能,同时全部插入到您的表中 - 您不应该具有基于PK的聚簇索引,该PK也是标识列。有关说明,请参阅此article。为此,会在表格中创建一个热点,从而对性能产生负面影响。
在具有标识列作为PK的表中,几乎总有一个更合适的列基于聚簇索引。