mongo db 中创建索引的区别

问题描述 投票:0回答:1

我想知道这两种索引有没有区别

我的目标是在搜索这两个键时创建一个复合索引

   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() 识别任何差异

mongodb mongodb-indexes
1个回答
0
投票

以下是您提供的两种类型的索引的工作原理:

  1. 第一个是字段 Id

    Name
    上的
    升序 
    复合索引。 此索引对于首先按
    Id
    (按 升序 顺序)然后按
    Name
    (同样按 升序 顺序)进行筛选的查询很有用。

  2. 第二个是字段

    Id
    升序顺序排列的复合索引,以及
    Name
    降序顺序排列的复合索引。此索引对于首先按
    Id
    (按升序)、然后按
    Name
    (按降序)进行筛选的查询非常有用。

尽管这些索引可能看起来相似,但根据为字段指定的方向(升序或降序),它们在不同的查询环境中得到最大限度的利用。

如果您尝试使用

Find().Explain()
并且没有注意到输出有任何差异,可能是因为您的测试数据集不够大,字段
Id
Name
可能没有足够的唯一条目来创建可观察的差异,或者您的查询没有以最佳方式利用这些索引中的顺序差异进行定制。

© www.soinside.com 2019 - 2024. All rights reserved.