【发布时间】:2020-07-26 13:03:59
【问题描述】:
我在 Autopilot 模式下使用 Cosmos DB,在 Collection 中将最大 RU/s 设置为 20K RU/s。我正在使用 SQL API。我在这个特定分区中有几十万条记录。我有默认的索引策略,即所有内容都被索引。我已进入 Azure 门户中的数据资源管理器并运行了以下查询:
SELECT count(1) FROM c where c.partitionKey = "12140" and c.uniqueId = "20cdb686-6959-4ed6-ac31-c7f414238f68" and c.timestampAsString = null
查询统计数据显示 RU/s 费用为 3.46。这太棒了!
然后我运行一个非常相似的查询,但我正在测试 c.timestampAsString 是否不为空:
SELECT count(1) FROM c where c.partitionKey = "12140" and c.uniqueId = "20cdb686-6959-4ed6-ac31-c7f414238f68" and c.timestampAsString != null
上述查询的总 RU/s 费用为 2989.73 RU/s。这是相当高的一点。我期待着原始查询的内容。
谁能解释为什么这些查询费用如此不同?
【问题讨论】:
-
嗯。使用
IS_NULL(c.timestampAsString)和NOT IS_NULL(c.timestampAsString)时,您会得到相同类型的结果差异吗? -
@David Makogon,我希望你能看到这个。是的,NOT IS_NULL 的 RU/s 费用与 != null 相同。
-
还有一个问题:这是最新的索引推出,还是旧的集合? (刚刚发布了一个发布 + 公告)显式调用的优化之一 (article link) 是不等式运算符。
-
这是一个两个月前的集合,所以它早于这次改进。您引用的文章建议在相关属性上添加索引。我正在使用索引所有内容的默认索引策略。我可以添加一个显式的附加索引吗?
-
我不是 100% 肯定这些更新适用于当前集合(至少立即);我必须调查的事情。而且我很确定,如果您已经设置了自动索引,则不需要显式添加索引。适用于不等式的文章的关键部分:“如果存在不等式过滤器或未定义值上的过滤器,则查询引擎将需要加载这些文档中的每一个。由于不等式过滤器和未定义值上的过滤器现在使用索引,我们可以避免加载这些文档并看到 RU 费用的显着改善。"
标签: azure azure-cosmosdb