MongoDB は独自にインデックスを作成しません。これは、アプリケーション、ユーザー、またはフレームワークが行うことです。クエリの場合、MongoDB は、identifierX、identifierY、または identifierZ のいずれかのインデックスしか使用できませんでした。ただし、そのようなインデックスがない場合は、もちろん何も使用されません。このidentifierX_1_identifierY_1_identifierZ_1
クエリにはインデックスを使用できません。
この場合、おそらく、このすべての識別子のインデックスを作成する必要があります。
db.ensureIndex( { 'identifierX' : 1 } );
db.ensureIndex( { 'identifierY' : 1 } );
db.ensureIndex( { 'identifierZ' : 1 } );
MongoDB は一度に 1 つのインデックスしか使用できず、"最適な" インデックスを選択しようとします。使用explain
して、どのインデックスが選択されているかを確認してください。
db.largecollection.find( { $or : [
{ identifierX : "sha1_hash123" },
{ identifierY : "md5_hash456" },
{ identifierZ : "another_hash789" }
] } ).explain();
これにより、どのインデックスが使用されているかについてのアイデアが得られるはずです。
$or
ただし、MongoDB がパーツごとに異なるインデックスを使用し、重複排除できるという例外があります。ここのドキュメントにあります。(もちろん) 複合インデックスはまだ使用されていないため、上記で記述したインデックスが必要です。