gpt4 book ai didi

sql-server - 外键与主键的聚集索引

转载 作者:行者123 更新时间:2023-12-01 06:03:08 33 4
gpt4 key购买 nike

表结构(SalesPersonProduct)

SalesPersonProductId INT (PK, Clustered)   
SalesPersonId INT (FK - non-unique - Nullable)
ProductId INT (FK - non-unique - Nullable)
AreaId INT (Not Null)
DistributionType INT (Not Null)
ItemOrder INT (Not Null)
ItemSize INT (Not Null)

场景:SalesPersonId 是非唯一的,实际上此列中可能有 70 - 80 个重复项。但是,这是唯一用于读取和连接的列,目前没有索引。

SalesPersonProductId 仅用作 PK 以供引用,对这些表的更新通过 PK 处理但很少发生。一旦将行添加到表中,PK 或 SalesPersonId 都不会更新。

问题:
假设我不能对表结构或相关表进行任何更改。将现有 PK 更改为非聚集索引并将 SalesPersonId 添加为聚集索引是否会更好?或者只是将 SalesPersonId 添加为标准的非聚集索引?

我知道在幕后,许多非唯一值将获得唯一标识符 - 但是该列几乎用于所有读取,我希望这将提供最佳性能增益,尽管以现在使用的额外字节为代价在这个新的聚集索引上保留“唯一性”。

最佳答案

你错过了一件事。

i) 哪一列将最用于搜索,即在 where 子句中使用最多。如果 SalesPersonId 则将其设为 CI,或者您可以将 SalesPersonId 和 productid 设为 CI。

ii)如果您可以更进一步,那么还可以计算索引的选择性

https://www.google.co.in/webhp?sourceid=chrome-instant&rlz=1C1CHMO_enIN556IN556&ion=1&espv=2&ie=UTF-8#q=how+to+find+selectivity+of+an+index

关于sql-server - 外键与主键的聚集索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43046185/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com