我在某处查询了查询除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));
如何在表上构建此查询?我是否可以控制首先应用哪个过滤器 - 它是应用它们的顺序,所以在这种情况下,我首先得到一个说100k行的子集,然后应用时间戳过滤器。
我开始考虑的原因是我想使用PartitionKey和RowKey来存储不同的数据以进行分离,但我还需要能够尽可能高效地按日期查询。系统将承担相当大的工作量,并且会有很多这样的请求,因此及时工作非常重要。
答案 0 :(得分:1)
所有查询再次使用TableStorage首先应用PatitionKey和第四个RowKey过滤器,然后为每个块应用其他过滤器。如果要通过其他某些字段提高查询性能,则需要将它们作为PartitionKey或RowKey的一部分包含在内。这是唯一的方法。您可以在PartitionKey和RowKey属性中找到一些高级技术来执行连接,并从TableStorage中检索它们。