在 ATS 中,PartitionKey用作分布查找,而不是索引。从使用 ATS 的层面来看,只考虑 PartitionKey 和“server”/node 共享 1:1 的关系。 (在幕后这不是真的,但是诸如优化位于同一物理/虚拟节点上的 PartitionKeys 之类的概念是从 Azure 的消费者必须处理的几个层面抽象出来的。这些细节纯粹是整体内部的Azure 基础设施,在 ATS 的情况下,最好假设这是一个最优的,因为它可能是……也就是“不用担心”)
在 DBMS 与 ATS 的上下文中,RowKey是最接近“索引”的东西,因为它有助于跨相似节点查找数据。要直接回答您的一个问题,RowKey 是 PartitionKey 中的索引。
然而,稍微跳出框框,PartitionKey可以让您获得更接近您对传统索引的看法的性能增益,但这仅仅是因为您的数据在 ATS 节点之间分布的分布式特性。您应该首先将布局优化到 PartitionKey,然后再优化到 RowKey。(又名,如果您只有一个可键入的值,请将其设为 PartKey)
一般来说,查询将按此顺序执行,从最高效到最不高效
1. PartitionKey=x and RowKey=y (and OtherProp = z)
因为查找到达正确的节点,然后到达分区上的索引道具
2. PartitionKey=x(和OtherProp=z)
因为您到达了正确的节点,然后到达了 ATS equvi。全表扫描
3. 其他属性 = z
因为你必须先进行分区扫描,然后再进行表扫描
有了这个,你的直接问题
我不觉得这个可以回答。它是主观的(即“什么是快的?”)。它总是比 Query2 慢,但是有 10 行,“慢”可能是毫秒,即使
(类似主题)它会比查询 1 更快。任何时候你可以做 Query2,你应该
因此,有了这个解释和您的问题,真正的答案归结为您的架构师如何使用 ATS。
根据您的数据集(当前和预期的增长),您需要确定一个适当的方案,以便您可以访问您的分区和行是最快的方式。知道查找是如何发生的,您可以做出合乎逻辑的决定,决定什么路径可以让您足够快地到达那里,更多的部分,更少的行 - 与更少的部分,更多的行等