gpt4 book ai didi

Azure DocumentDB 按 ID 查询非常慢

转载 作者:行者123 更新时间:2023-12-04 11:33:40 26 4
gpt4 key购买 nike

我有一个 16GB 的集合,有 2 个分区。当我通过 ID 查询文档时,速度非常慢。但是通过索引字段查询速度很快。两者都是跨分区查询,如果我通过查询传递分区键,速度会很快,但分区键并不总是可用于我的查询。在 Azure 门户中使用 .NET SDK 和文档资源管理器查询得到了类似的结果。

该集合具有自定义索引策略,但据我所知,您不需要索引 Id ,否则可能根本不可能。

以下是我的查询及其相应的请求费用。

SELECT * FROM c where c.id = 'unique-id-123'
-- Request Charge: 344940.79 RUs, Document Count: 1

SELECT * FROM c WHERE c.otherId = 'NOT-so-uniqueId-123'
-- Request Charge: 5.08 RUs, Document Count: 3

如您所知,Id 是唯一的,因此查询返回 1 个文档,而第二个查询则通过 otherId 进行过滤,后者不太唯一并返回 3 个文档。另请注意第一个查询的 RU 消耗非常高。

那么为什么第二个查询比通过 Id 查询更快呢?


更新:
以下是针对上述查询收集的指标。

按ID查询:

Read 1 records in 1497 ms, 339173.109 RU, Size: 6873022 KB
QueryPreparationTime(ms): CompileTime = 2, LogicalBuildTime = 0,
PhysicalPlanBuildTime = 0, OptimizationTime = 0
QueryEngineTime(ms): DocumentLoadTime = 1126, IndexLookupTime = 0,
RuntimeExecutionTimes = 356, WriteOutputTime = 0

按索引字段查询:

Read 4 records in 2 ms, 7.56 RU, Size: 9 KB
QueryPreparationTime(ms): CompileTime = 0, LogicalBuildTime = 0,
PhysicalPlanBuildTime = 0, OptimizationTime = 0
QueryEngineTime(ms): DocumentLoadTime = 0, IndexLookupTime = 1,
RuntimeExecutionTimes = 0, WriteOutputTime = 0

这些证明通过 Id 进行的查询正在执行表扫描,因为大部分时间都来自于 DocumentLoadTime,而 IndexLookupTime 没有任何值。
但我认为 Id 应该是主键,并且默认按照此 answer 进行索引作者:@andrew-liu。

最佳答案

Microsoft 支持人员做出了回应,并解决了该问题。他们为该集合添加了 IndexVersion 2。不幸的是,它还不能从门户获得,并且新创建的帐户/集合仍然没有使用新版本。您必须联系 Microsoft 支持人员才能对您的帐户进行更改。

以下是使用索引版本 2 的集合的新结果,并且有巨大的改进。

SELECT * FROM c where c.id = 'uniqueValue'
-- Index Version 1: Request Charge: 344,940.79 RUs
-- Index Version 2: Request Charge: 3.31 RUs

SELECT * FROM c WHERE c.indexedField = 'value' AND c.id = 'uniqueValue'
-- Index Version 1: Request Charge: 150,666.22 RUs
-- Index Version 2: Request Charge: 5.65 RUs

关于Azure DocumentDB 按 ID 查询非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49684890/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com