3

_id フィールドによる降順の並べ替えが、システムによって自動的に作成されたインデックスを利用するかどうかを調べようとしています。私はそれを理解するために Explain() を使用しようとしましたが、よくわかりません。データをより速く戻すために、降順で _id に追加のインデックスを作成する必要がありますか?

> db.foo.insert({ name: 'foo' });
> db.foo.insert({ name: 'bar' });
> db.foo.find();
{ "_id" : ObjectId("5142d30ca4a8b347cb678c1a"), "名前" : "foo" }
{ "_id" : ObjectId("5142d310a4a8b347cb678c1b"), "名前" : "バー" }
> db.foo.find().sort({ _id: -1 });
{ "_id" : ObjectId("5142d310a4a8b347cb678c1b"), "名前" : "バー" }
{ "_id" : ObjectId("5142d30ca4a8b347cb678c1a"), "名前" : "foo" }
> db.foo.find().sort({ _id: -1 }).explain();
{
    "cursor" : "BtreeCursor_id_reverse",
    "isMultiKey": false,
    "n" : 2,
    "nscannedObjects": 2,
    "nscanned": 2,
    "nscannedObjectsAllPlans": 2,
    "nscannedAllPlans": 2,
    "scanAndOrder": false,
    "indexOnly": 偽,
    "nYields": 0,
    "nChunkSkips": 0,
    「ミリ」:0、
    "indexBounds": {
        "_id": [
            [
                {
                    "$最大要素": 1
                }、
                {
                    "$最小要素": 1
                }
            ]
        ]
    }、
    "サーバー": "localhost:27017"
}
4

1 に答える 1

5

_id説明は、プロパティの下の最初の行のために、デフォルトのインデックスを逆に使用できるかどうかについての良い指標を提供しますcursor: BtreeCursor _id_ reverse.

BtreeCursorインデックスを使用しているカーソルであることを示し、インデックスを逆に_id_ reverse使用していることを示します。_id_

_idすべての意図と目的から、インデックスを逆に正しく使用する必要があります。

さらに、MongoDB にはまだインデックスの交差 ( https://jira.mongodb.org/browse/SERVER-3071 ) がありません。これは、(ほとんどのクエリで) 条件と並べ替えの両方に単一のインデックスを使用していることを意味します。そのため、検索条件を使用する場合は、おそらく_id将来のインデックスも含める必要があることがわかります。

于 2013-03-15T08:48:18.553 に答える