gpt4 book ai didi

MongoDB 覆盖索引不起作用

转载 作者:可可西里 更新时间:2023-11-01 09:47:05 25 4
gpt4 key购买 nike

我有一个看起来像这样的国家文件:

{
"_id" : ObjectId("4e493af4140700590800154f"),
"geoname_id" : "49518",
"code" : "rw",
"names" : {
"en" : "Rwanda",
"nl" : "Rwanda",
"de" : "Ruanda"
}
}

为了仅在查询时触及索引:

db.countries.find({}, {"names.en":1, _id:0})

我添加了以下索引:

db.countries.ensureIndex({"names.en":1})

据我了解,查询现在应该只涉及索引。但是,.explain() 告诉我查询根本没有使用任何索引:

{
"cursor" : "BasicCursor",
"nscanned" : 247,
"nscannedObjects" : 247,
"n" : 247,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
}
}

我认为原因可能是将输出完整的数据库(247 个国家/地区)但这对我来说没有任何意义。当国家在索引中可用时应该使用索引,对吧?

有人有想法吗?

干杯

最佳答案

它不使用索引的原因是因为您没有查询任何条件。如果没有查找条件,查询优化器将不会选择要使用的索引,因此无法用作覆盖索引。

尝试 db.countries.find({"names.en":"Rwanda"}, {"names.en":1, _id:0}).explain() 来验证有了索引标准,它实际上会命中适当的索引。

MongoDB 需要足够智能以实现它可以使用索引来满足原始查询的情况,但目前还没有。您也可以使用 .sort({"names.en":1}) 使其选择索引。

关于MongoDB 覆盖索引不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7075457/

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