1

我正在考虑使用 MongoDB 并将我的数据从 MySQL 转移。我将使用 MongoDB 的嵌入式数组,并添加了 100,000 个示例文档。这是文档的架构和一些示例数据:

array(
   "a" => array("a", "c", "d"),
   "b" => 200
)

array(
    "a" => array("b", "e", "d"),
    "b" => 300
)

array(
    "a" => array("f", "c", "d"),
    "b" => 400
)

array(
    "a" => array("o", "l", "g"),
    "b" => 500
)


array(
"a" => array("x","c","b"),
"b" => 600
)

一个示例查询是这样的:要获取 200 到 500 之间的所有 x 记录,

array("a" => "x", "b" => array('$gte' => 200, '$lte' => 500))

当我将 (a,b) 索引在一起并将其限制为 10 时,我得到“nscanned”和“n”10,这是完美的。但是,正如我从文章中读到的,跳过的成本很高,所以我必须根据它们的“_id”对它们进行排序,并用“$gt”对下一个文档进行分页。

在此之后,我将 (a,b,_id) 索引在一起,并且我也尝试了反向 _id 复合索引组合。但是 (a,_id(-1),b) 给了我最好的结果,但是 nscanned 还是太多了。我从 MongoDB 文档中阅读,它说如果你将排序字段放在复合索引中,它会很好地排序,但它没有很好地排序。我该如何管理?

4

0 回答 0