C# MongoDB驱动器C索引未使用
在MongoDB中:C# MongoDB驱动器C索引未使用,c#,mongodb,indexing,C#,Mongodb,Indexing,在MongoDB中: db.estr.createIndex({_id:1, Atualizar:-1}); 在C中 索引统计数据 { "name" : "_id_1_Atualizar_-1", "key" : { "_id" : 1.0, "Atualizar" : -1.0 }, "host" : "OMNIIS2012HOM:27017", "accesses" : { "ops" : Number
db.estr.createIndex({_id:1, Atualizar:-1});
在C中
索引统计数据
{
"name" : "_id_1_Atualizar_-1",
"key" : {
"_id" : 1.0,
"Atualizar" : -1.0
},
"host" : "OMNIIS2012HOM:27017",
"accesses" : {
"ops" : NumberLong(0), <----- not utilizade
"since" : ISODate("2020-03-24T11:00:25.011-03:00")
}
}
在MongoDB上执行搜索时,未调用索引
x、 Atualizar是布尔值您的查询正在对索引规范中的第一个字段进行不等匹配,因此它必须扫描整个索引,对于满足查询的每个_id值,检查匹配的Atualizar值。在许多情况下,这将执行比集合扫描更糟糕的操作,因此可能永远不会使用索引 如果要交换索引中字段的顺序,即
db.estr.createIndex({Atualizar:-1, _id:1})
查询执行器将能够在第一个匹配Atualizar的键处开始扫描,并使用两次扫描的_id值选择所有匹配的文档。这应该执行得更好,因此查询计划器应该选择此索引
注意,对于所有文档都适合RAM的非常小的数据集,收集扫描通常是最快的
db.estr.createIndex({Atualizar:-1, _id:1})