我有一个大约4gb的cosmos db,当它很小时,它可以以较低的RU值(3-15ish)相对较快地执行日期过滤,但是随着DB包含数百万条记录的发展,它现在已经变慢了RU值增加了数千。
查看日期https://docs.microsoft.com/en-us/azure/cosmos-db/working-with-dates的文档说
要有效执行这些查询,您必须配置您的 字符串范围索引的集合
但是,阅读链接索引策略文档(https://docs.microsoft.com/en-us/azure/cosmos-db/index-policy)听起来好像默认情况下每个字段都创建了一个范围索引
新创建的容器的默认索引策略对每个项目的每个属性进行索引,对任何字符串或数字强制执行范围索引,对Point类型的任何GeoJSON对象强制执行空间索引
是否需要将索引配置为默认值以外的其他值?
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?"
}
]
}
答案 0 :(得分:1)
关于索引编制,您可以从here
中查看最佳做法。您应该从索引中排除未使用的路径,以加快写入速度。 您应该将IndexedPolicy与IncludedPaths和ExcludedPaths一起使用
例如:
var collection = new DocumentCollection { id = "excludedPathCollection"};
collection.IndexingPolicy.IncludedPaths.Add(new IncludedPath { Path = "/*" });
collection.IndexingPolicy.ExcludedPaths.Add(new ExcludedPath { Path = "/nonIndexedContent/*");
答案 1 :(得分:0)
因此,如果您担心查询成本编制索引并不会真正有帮助。写入成本取决于索引,而不取决于读取。如果您看到每个请求有成千上万个RU,我怀疑您是在使用跨分区查询,还是根本没有分区(或所有内容都只有一个分区)。为了降低这些成本,您需要停止使用跨分区查询,或者(如果无法使用跨分区查询)以无需使用跨分区查询的方式重新整理数据。
我认为范围是cosmos db中的默认索引</ p>