複合インデックス は、複数のフィールドへの参照を含むインデックスです。複合インデックスを使用すると、インデックス内のフィールド、またはインデックスプレフィックス内のフィールドのみに対するクエリのパフォーマンスが向上します。
複合インデックスを作成するには、 db.collection.createIndex()メソッドを使用します。
db.<collection>.createIndex( { <field1>: <sortOrder>, <field2>: <sortOrder>, ... <fieldN>: <sortOrder> } )
制限
単一の複合インデックスで最大32フィールドを指定できます。
始める前に
このページの例では、 sample_mflix データセット のデータを使用します。このデータセットを自己管理型MongoDBデプロイにロードする 方法の詳細については、「 サンプル データセットをロードする 」を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。
手順
次の操作では、 フィールドと フィールドを含む複合インデックスが作成されます。titlemetacritic
db.movies.createIndex( { title: 1, metacritic: -1 } )
title_1_metacritic_-1
この例では、次のことが行われます。
titleのインデックスは昇順(1)です。metacriticのインデックスは降順(-1)です。
結果
作成されたインデックスは、以下を選択するクエリをサポートします。
titleフィールドとmetacriticフィールドの両方。titleフィールドのみ。titleは複合インデックスのプレフィックスであるため。
たとえば、 インデックスは次のクエリをサポートしています。
db.movies.find( { title: "The Godfather", metacritic: 100 }, { _id: 0, title: 1 } )
[ { title: 'The Godfather' } ]
db.movies.find( { title: "The Godfather" }, { _id: 0, title: 1 } )
[ { title: 'The Godfather' } ]
インデックスは、 metacriticはインデックスのプレフィックスの一部ではないため、 metacriticフィールドのみを対象とするクエリをサポートしていません。 たとえば、 インデックスは次のクエリをサポートしていません。
db.movies.find( { metacritic: { $gt: 98 } }, { _id: 0, title: 1, metacritic: 1 } )
[ { metacritic: 100, title: 'The Wizard of Oz' }, { metacritic: 99, title: 'The Night of the Hunter' }, { metacritic: 100, title: 'Lawrence of Arabia' }, { metacritic: 100, title: 'The Leopard' }, { metacritic: 100, title: 'The Conformist' }, { title: 'The Godfather', metacritic: 100 }, { metacritic: 100, title: 'Fanny and Alexander' }, { metacritic: 100, title: 'Boyhood' }, { metacritic: 100, title: 'Best Kept Secret' } ]
詳細
効率的な複合インデックスの作成方法については、「 ESR(Equality、Sort、Range)ガイド 」を参照してください。
ソート順序(昇順または降順)が複合インデックスのパフォーマンスにどのように影響するかについては、「インデックスを使用してクエリ結果をソートする 」を参照してください。
その他のインデックス タイプの詳細については、「インデックス タイプ 」を参照してください。
インデックスに指定可能なプロパティについては、「インデックスのプロパティ 」を参照してください。