2

我在某处读到查询 RowKey 和 PartitionKey 以外的数据将导致全表扫描。我希望正确理解整个查询过程,但我对整个考验感到有点空虚。

假设我在单个存储中有几百万行数据对象。我将它按 PartitionKey 划分为数据子集。假设我创建了一个查询

var query = new TableQuery<MyEntity>()
    .Where(TableQuery.CombineFilters(
        TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, pPartition),
        TableOperators.And,
        TableQuery.GenerateFilterCondition("Timestamp", QueryComparisons.GreaterThanOrEqual, startTime));

这个查询是如何在表端构造的?我是否可以控制首先应用哪个过滤器 - 是应用它们的顺序吗,所以在这种情况下,我首先会得到一个子集 say.. 100k 行,然后应用时间戳过滤器。

我开始考虑这样做的原因是我想同时使用 PartitionKey 和 RowKey 来存储不同的数据以进行分离,但我还需要能够尽可能高效地按日期查询。该系统将具有相当繁重的工作负载,有很多这样的请求,因此及时工作很重要。

4

1 回答 1

1

所有针对 TableStorage 的查询首先应用 PatitionKey 和 th RowKey 过滤器,然后为每个块应用附加过滤器。如果您想通过某些其他字段提高查询的性能,您需要将它们作为 PartitionKey 或 RowKey 的一部分包含在内。这是做到这一点的唯一方法。您可能会在 PartitionKey 和 RowKey 属性中找到一些高级技术来执行连接并从 TableStorage 中检索它们。

于 2013-08-05T16:16:36.580 回答