Sql server SqlServer大型nvarchar聚集索引

Sql server SqlServer大型nvarchar聚集索引,sql-server,azure,database-design,database-schema,clustered-index,Sql Server,Azure,Database Design,Database Schema,Clustered Index,我有一个用于缓存地理编码结果的表,我计划在其中使用搜索字符串作为主键/聚集索引,因为我希望它是唯一的,并且为快速查找编制索引。这将是相当大的,可能是nvarchar(300)。我已经看到,由于大小和性能的原因,通常建议不要使用大型集群密钥,我认为唯一性并不重要,因为我只是缓存结果,所以有更好的方法来实现这一点吗 搜索字符串可以包含可选的边界坐标,这些坐标可以放在单独的列中,但它们确实构成唯一性标识的一部分 此外,我还希望保持此表与Sql Azure兼容,因为Sql Azure需要表中某个位置的聚

我有一个用于缓存地理编码结果的表,我计划在其中使用搜索字符串作为主键/聚集索引,因为我希望它是唯一的,并且为快速查找编制索引。这将是相当大的,可能是nvarchar(300)。我已经看到,由于大小和性能的原因,通常建议不要使用大型集群密钥,我认为唯一性并不重要,因为我只是缓存结果,所以有更好的方法来实现这一点吗

搜索字符串可以包含可选的边界坐标,这些坐标可以放在单独的列中,但它们确实构成唯一性标识的一部分


此外,我还希望保持此表与Sql Azure兼容,因为Sql Azure需要表中某个位置的聚集索引。

好的聚集键的基础是它是。这当然是在狭义上失败的,虽然我不知道你的数据,但我预计它在不断增加上失败。这使得它不能作为集群密钥的候选。我倾向于使用代理主键作为聚集键,并在较长的列上创建一个新的唯一(如有必要)非聚集索引,以加快查找速度。您还可以在此索引中包含常用列,以减少需要键查找的查询数。而不是将缓存键填充到字符串中,您能用适当的数据类型将其存储在单独的列中吗?PK可以跨越多列。@GarethD鉴于我自己没有使用代理键(它是一个单独的表),我想我的决定是基于是否最好使用一个额外的聚集键以及唯一的非聚集索引,还是只使用自然聚集键。在阅读了您链接中的一些推理之后,我仍然不确定在这种特定情况下哪个更好,但我认为sqlserver可能在幕后使用集群键做了一些我不知道的事情,所以我同意您的建议。如果你把它添加为一个答案,我会把它标记为正确的。在我链接到的文章中,或者文章顶部的链接中,金伯利·特里普都没有说过我可以发布的答案。如果我发布一个答案,它要么只是一个链接的答案,要么只是复制和粘贴这些答案。我不容忍任何性质的回答。我认为最好还是不要回答这个问题,希望有一天有人会在上面的链接上发布一些东西。没有理由为了一个问题必须有答案,我也没有真正回答这个问题。