私が追跡しなければならない私の文書のさまざまなタイムスタンプを索引付けするためのより効率的な技術であると思うものは、私のアプリケーションはかなり重いですが、索引なしで読むことはかなり重いです。 。MongoDB多くのインデックス対サブドキュメントの配列上の単一インデックス?
各タイムスタンプにフィールドを持ち、各フィールドにインデックスを付けるか、タイムスタンプとその関連タイプを配列フィールドに格納し、その配列の各フィールドにインデックスを付ける方がよいでしょうか?
最初のオプション、別々のフィールド、およびそれぞれのインデックス:
{
"_id" : "...",
"Field1.Timestamp" : '2011-01-01 01:00.000',
"Field2.Timestamp" : '2011-01-01 01:00.000',
"Field3.Timestamp" : '2011-01-01 01:00.000',
"Field4.Timestamp" : '2011-01-01 01:00.000',
"Field5.Timestamp" : '2011-01-01 01:00.000',
"Field6.Timestamp" : '2011-01-01 01:00.000',
"Field7.Timestamp" : '2011-01-01 01:00.000',
"Field8.Timestamp" : '2011-01-01 01:00.000',
"Field9.Timestamp" : '2011-01-01 01:00.000',
}
db.mycollection.ensureIndex({ "Field1.Timestamp" : 1 });
db.mycollection.ensureIndex({ "Field2.Timestamp" : 1 });
db.mycollection.ensureIndex({ "Field3.Timestamp" : 1 });
db.mycollection.ensureIndex({ "Field4.Timestamp" : 1 });
db.mycollection.ensureIndex({ "Field5.Timestamp" : 1 });
db.mycollection.ensureIndex({ "Field6.Timestamp" : 1 });
db.mycollection.ensureIndex({ "Field7.Timestamp" : 1 });
db.mycollection.ensureIndex({ "Field8.Timestamp" : 1 });
db.mycollection.ensureIndex({ "Field9.Timestamp" : 1 });
そして、タイムスタンプの配列とそのステータスがあります、ただ一つの指標と
{
"_id" : "...",
"Timestamps" : [
{ "Type" : "Field1", "Timestamp" : '2011-01-01 01:00.000' },
{ "Type" : "Field2", "Timestamp" : '2011-01-01 01:00.000' },
{ "Type" : "Field3", "Timestamp" : '2011-01-01 01:00.000' },
{ "Type" : "Field4", "Timestamp" : '2011-01-01 01:00.000' },
{ "Type" : "Field5", "Timestamp" : '2011-01-01 01:00.000' },
{ "Type" : "Field6", "Timestamp" : '2011-01-01 01:00.000' },
{ "Type" : "Field7", "Timestamp" : '2011-01-01 01:00.000' },
{ "Type" : "Field8", "Timestamp" : '2011-01-01 01:00.000' },
{ "Type" : "Field9", "Timestamp" : '2011-01-01 01:00.000' },
]
}
db.mycollection.ensureIndex({ "Timestamps.Type" : 1, "Timestamps.Timestamp" : 1 });
は私が道オフアムここの印?
あなたのクエリはどのように見えますか? –
クエリは$ LT比較のタイムスタンプフィールドを使用します。{"Field1Timetamp":{$ LT: "2011-01-01 01:00.000"}、 "BatchExpires":{$ LT: "2011-01-01 01: 00.000 "}、" Prioritized ":true} インデックスには他の2つのフィールドも含まれますが、わかりやすくするために、いくつかのフィールドがないため、それらを残しました(BatchExpiresとPrioritizedフィールド) – Redth
私の考えは、配列内のフィールドに9または10のインデックスよりも効率的なサブ文書の配列の2つのインデックスです... – Redth