我想知道这两种索引有没有区别
我的目标是在搜索这两个键时创建一个复合索引
collection.Indexes.CreateOne(
new CreateIndexModel<Data>(
Builders<Data>.IndexKeys.Combine(
Builders<Data>.IndexKeys.Ascending(a => a.Id),
Builders<Data>.IndexKeys.Ascending(a => a.Name))));
collection.Indexes.CreateOne(
new CreateIndexModel<Data>(
Builders<Data>
.IndexKeys
.Ascending(a => a.Id)
.Descending(a => a.Name)));
在测试中,他们显然创建了相同的索引,我无法使用 Find().Explain() 识别任何差异
以下是您提供的两种类型的索引的工作原理:
第一个是字段 Id
和
Name
上的 升序复合索引。 此索引对于首先按
Id
(按 升序 顺序)然后按 Name
(同样按 升序 顺序)进行筛选的查询很有用。
第二个是字段
Id
按升序顺序排列的复合索引,以及Name
按降序顺序排列的复合索引。此索引对于首先按 Id
(按升序)、然后按 Name
(按降序)进行筛选的查询非常有用。
尽管这些索引可能看起来相似,但根据为字段指定的方向(升序或降序),它们在不同的查询环境中得到最大限度的利用。
如果您尝试使用
Find().Explain()
并且没有注意到输出有任何差异,可能是因为您的测试数据集不够大,字段 Id
和 Name
可能没有足够的唯一条目来创建可观察的差异,或者您的查询没有以最佳方式利用这些索引中的顺序差异进行定制。