我需要针对表存储运行查询。我需要从大约10个连续的分区键获取特定数据。更确切地说,我的Azure表包含PK / RK模式,因此每个PK都有大约300行。在每个PK中,我需要检索大约100行。
我可以这样打1个电话:
var query = table.CreateQuery<Item>()
.Where(n => string.Compare(n.PartitionKey, fromPk, StringComparison.Ordinal) >= 0 &&
string.Compare(n.PartitionKey, toPk, StringComparison.Ordinal) <= 0 &&
string.Compare(n.RowKey, fromRk, StringComparison.Ordinal) >= 0 &&
string.Compare(n.RowKey, endRk, StringComparison.Ordinal) <= 0
).AsTableQuery();
或 10个电话:
var query = table.CreateQuery<Item>()
.Where(n => string.Compare(n.PartitionKey, pk, StringComparison.Ordinal) == 0 &&
string.Compare(n.RowKey, fromRk, StringComparison.Ordinal) >= 0 &&
string.Compare(n.RowKey, endRk, StringComparison.Ordinal) <= 0
).AsTableQuery();
什么更好?
答案 0 :(得分:0)
我自己没有对它进行过分析,我猜测在某些情况下差异可能非常小,但单一查询可能就是这样。
单个查询相当有效,但是由于您拥有的数据量(结果集中大约3000行)以及一次最多可获得1000行的事实,这将导致至少3个在引擎盖下调用API。
单个查询可能单独更快,您可能不会获得延续令牌,您可以并行运行它们。如果你不能并行运行查询,我会期望请求的延迟超过任何查询性能差异。