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のドキュメントを読んだところ、並べ替えフィールドを複合インデックスに配置すると、うまく並べ替えられると書かれていますが、うまく並べ替えられませんでした。どうすればこれを管理できますか?