2

MongoDB 文档

...查询优化器通过偶尔运行备用查询计划并通过为每种查询类型选择具有最佳响应时间的计划来凭经验选择索引...

我在使用 MongoDB 2.0.2 时遇到的问题是,Mongo 似乎一直在为某些查询运行备用查询计划。

这不仅使整个过程非常缓慢(explain({verbose:true}) 在 'allPlans' 数组中显示了 10-15 个额外的测试),Mongo 也没有选择最佳索引。使用我为该查询创建的索引提供提示命令会产生更快的结果。

这是一个例子:

> db.posts.find({"project.id" : 2, "project.sections" : 1, "reading" : {"$in" : [0,1]}, "publicate" : 1}).sort({"date":-1}).explain()

"cursor" : "BtreeCursor project.id_1_reading_1_publicate_1_public_1_last_comment_time_1 multi",
"nscanned" : 13347,
"nscannedObjects" : 13346,
"n" : 7619,
"millis" : 2371,
"nYields" : 7,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,

使用 verbose:true 的相同查询在 'allPlans' 数组中显示这些索引:

"BtreeCursor reading_1_publicate_1_last_comment_time_1 multi",
"BtreeCursor date_-1_community_id_1",
"BtreeCursor project.id_1_reading_1_publicate_1_public_1_last_comment_time_1 multi",
"BtreeCursor project.id_1_reading_1_publicate_1_last_comment_time_1 multi",
"BtreeCursor project.id_1_project.sections_1_reading_1_publicate_1_public_1_date_-1 multi",
"BtreeCursor timeline_main_liked_all",
"BtreeCursor timeline_main_liked_user",
"BtreeCursor timeline_main_commented_all",
"BtreeCursor timeline_main_commented_user",
"BtreeCursor project.id_1_reading_1_publicate_1_public_1_project.sections_1 multi",
"BtreeCursor publicate_1_public_1_date_-1_reading_1_type_1 multi",
"BtreeCursor publicate_1_timeline_visibility_all_1_short.formatted_1_short.show_1_short.commercial_1_date_-1",
"BtreeCursor publicate_1_timeline_visibility_user_1_short.formatted_1_short.show_1_short.commercial_1_date_-1",
"BasicCursor",
  1. 如何让 Mongo 一直停止运行这些索引检查?
  2. 如何让 Mongo 使用并坚持实际的最佳索引?
4

0 回答 0