インデックスを使用して個別クエリを最適化することができません。対象となるクエリを使用するための個別インデックスの作成
私のコレクションは次のようになり:
{
"_id" : ObjectId("592ed92296232608d00358bd"),
"measurement" : ObjectId("592ed92196232608d0034c23"),
"loc" : {
"coordinates" : [
2.65939299848366,
50.4380671935187
],
"type" : "Point"
},
"elements" : [
ObjectId("592ed92196232608d0034c24"),
ObjectId("592ed92196232608d0034c26"),
ObjectId("592ed92196232608d0034c28")
]
}
私は
db.mycol.distinct('elements', {
$and:[
measurement:{
$in:[
ObjectId("592ed92196232608d0034c23"),
ObjectId("592ed92196232608d0034c24")
]
},
{
loc:{
$geoWithin:{
$geometry:{
type:'Polygon',
coordinates:[[
[
2.0214843750000004,
50.25071752130677
],
[
2.0214843750000004,
50.65294336725709
],
[
3.0487060546875004,
50.65294336725709
],
[
3.0487060546875004,
50.25071752130677
],
[
2.0214843750000004,
50.25071752130677
]
]]
}
}
}
}
]
})
のようなクエリを実行しようとしていると私は、このインデックスを持っている:
{
measurement: 1,
loc: '2dsphere',
elements: 1
}
クエリプランを( db.mycol.explain().distinct(...)
)にはIXSCANが示されていますが、クエリには年月がかかります。私はMongo covered queryを使うことができることを望むインデックスを追加しました。ドキュメントは、クエリ内の
- すべてのフィールドがインデックスの一部であることを
- を述べ、すべてのフィールドが同じインデックスにある結果として返さ。
だから、私はelements
を含むインデックスを必要と推測しました。しかし、クエリの実行時間に応じて、それを使用していない。
このようなクエリのコレクションをインデックスする最良の方法は何ですか?
コレクションに複数の「2dsphere」インデックスを作成することは、一般的にはお勧めできません。 '$ geoNear'や他の' $ near'ベースのクエリのような演算では、実際にはサポートされていません。最もよく使われている組み合わせを選んでそれに固執する必要があります。 –
ちょうど1つのインデックスを聞かせて、結果を教えてくれるようにしようとする –
編集されました。私は「要素」を含む2つのインデックスだけを残しました(最後に、または最初にこれを置く場所は不明ですが、これは文書化されていません)。この結果、COLSCANは今度は –