【发布时间】:2011-10-23 20:53:50
【问题描述】:
想知道哪种技术可以更有效地索引我需要跟踪的文档的各种时间戳,请记住我的应用程序在编写时相当繁重,但在读取时足够繁重,没有索引,查询也是慢。
最好为每个时间戳设置一个字段,并对每个字段进行索引,还是将时间戳及其关联类型存储在一个数组字段中,然后对该数组的每个字段进行索引?
第一个选项,单独的字段,每个字段都有一个索引:
{
"_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 } 索引也将包括其他两个字段,但为简单起见,我将它们省略了,因为它们中没有几个(只会有一个 BatchExpires 和一个 Prioritized 字段)
-
我的想法是,子文档数组上的 2 个索引是否比不在数组中的字段上的 9 或 10 个索引更有效...
-
我认为更少的索引可能是更好的方法,但我不能肯定地说,如果关键的话,可能值得对两种方式进行基准测试。
标签: mongodb indexing mongodb-.net-driver