哪个更快:对分区键进行范围查询或对 Azure 表存储中的 PK 进行单个相等查询?



我需要对表存储运行查询。我需要从大约10个连续分区键中获得特定的数据。更准确地说,我的Azure表包含一个PK/RK模式,因此每个PK大约有300行。在每个PK中,我需要检索大约100行。

我可以这样调用:

                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个调用this:

                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();

更好的是什么?

我自己没有分析过,我猜在某些情况下差异可能非常小,但单一查询可能是可行的方法。

单个查询是相当有效的,但是由于您拥有的数据量(结果集中大约有3000行)以及一次最多将获得1000行的事实,这将导致至少3次对底层API的调用。

单个查询可能更快,您可能不会得到延续令牌,您可以并行运行它们。如果您不能并行运行查询,我预计请求的延迟会压倒任何查询性能差异。

相关内容

最新更新