代码之家  ›  专栏  ›  技术社区  ›  driAn

在azure cosmos db(sql api)中进行非常简单的查询需要很高的请求费用

  •  3
  • driAn  · 技术社区  · 6 年前

    在azure cosmos db(sql api)中,以下查询收费 9356.66卢比 以下内容:

    SELECT * FROM Core c WHERE c.id = @id -- @id is a GUID
    

    相比之下,以下更复杂的查询仅收费 6.84卢比 以下内容:

    SELECT TOP 10 * FROM Core c WHERE c.type = "Agent"
    

    这两个示例中的文档都非常小,具有一些属性。此外,文档集合不使用任何自定义索引策略。该收藏包含105685份文件。

    对我来说,这听起来好像“id”字段没有合适的工作索引。

    这怎么可能,怎么能解决?

    更新:

    • 如果没有top关键字,第二个查询将收费3516.35ru并返回100000条记录。
    • 分区键为“/partition”,其值为0或1(均匀分布)。
    2 回复  |  直到 6 年前
        1
  •  0
  •   Olha Shumeliuk    6 年前

    如果有分区集合,则需要指定分区键才能最有效地执行请求。在cosmos中,跨分区查询非常昂贵(而且速度较慢),因为分区数据可以存储在不同的位置。

    尝试以下操作:

    SELECT * FROM Core c WHERE c.id = @id AND c.partition = @partition
    

    或者,如果您使用的是cosmosdb sdk,请在feed选项中指定分区键。

    如果这有帮助的话,告诉我。

        2
  •  0
  •   driAn    6 年前

    我假设解决方案与这里发布的相同: Azure DocumentDB Query by Id is very slow

    我将关闭我自己的问题,一旦我能够验证这与微软的支持。