16

mongodbのマルチキーでどのように正確にインデックスが作成されるかを理解するのは難しいと感じています。

これは、mongodbのWebサイトのドキュメントでマルチキーについて読んだものです
。1)「配列要素のインデックスにインデックスを作成すると、データベースに配列の各要素のインデックスが作成されます」
2)「...ドキュメントのすべてのタグにインデックスが付けられます、およびそのドキュメントの「X」、「Y」、および「Z」のインデックスエントリを作成します。」

では、そのドキュメントのインデックスエントリとは正確にはどういう意味ですか?各ドキュメントはエントリを覚えていますか?その場合、検索は全表スキャンになりますか?または、それはmysqlの同じbツリーインデックスであり、各インデックスエントリはそれぞれの出現ごとに複数のドキュメントを指します。その場合、私は考えすぎです。

例を見てみましょう:

obj1 = { 
    name: "Apollo",
    text: "Some text about Apollo moon landings",
    tags: [ "moon", "apollo", "spaceflight", "nasa" ]
}
obj2 = { 
    name: "Atlantis",
    text: "Some text about Atlantis flight missions",
    tags: [ "space", "atlantis", "spaceflight", "nasa" ]
}
db.articles.ensureIndex( { tags : 1 } )

私が理解するのを手伝ってください!前もって感謝します。

4

2 に答える 2

23

この場合、インデックス(Bツリー)は次のようになります。

 apollo => [ obj1 ]
 atlantis => [ obj2 ]
 moon => [ obj1 ]
 nasa  => [ obj1, obj2 ]
 space => [ obj2 ]
 spaceflight => [ obj1, obj2 ]

これは、すべてのドキュメントが複数回表示される可能性があることを除いて、単なる「通常の」Bツリーインデックスです(一意のタグ値ごとに1回表示されます)。

于 2011-09-13T02:44:04.103 に答える
2

マルチインデックスとコンパウンドインデックスの違いを誤解していると思います。

複合インデックスは、一度に複数のフィールドのユーザー定義インデックスです。Multykeyインデックス:MongoDBは、インデックスがリリースされるフィールドが配列であるかどうかを判断し、配列要素ごとにインデックスを作成します。たとえば、

db.user.ensureIndex({"address.street":1});

この場合、ターゲットフィールドは配列であるため、インデックスにはすべてのアイテムが1回だけ格納されます。

MongoDBの単純なimdexタイプについての疑問を明確にするこの単純なarticlwをご覧になることを強くお勧めします:http://mongodbspain.com/en/2014/01/24/mongodb-indexes-part1/

よろしく、

于 2014-02-10T00:15:47.677 に答える