[英]MongoDb indexes in ASP.NET MVC
我目前正在使用ASP.NET MVC应用程序,其中一些数据存储在MongoDb数据库中。
我的收藏集中包含这样存储的文档(C#类示例):
public class MeteredDataReading
{
[BsonId]
public int MyId { get; set; }
public string EDIEL { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime StartOccurence { get; set; }
public int Version { get; set; }
public DateTime Occurence { get; set; }
[BsonRepresentation(MongoDB.Bson.BsonType.Double)]
public decimal Quantity { get; set; }
}
现在,当涉及到索引时,我有点迷茫。 我们使用最的领域是: EDIEL
, Occurence
和CreatedDate
示例查询(04-0030-03)将是:
Get all MeteredDataReadings where EDIEL = 1234 and occurence >= startDate and occurence <= endDate and CreatedDate <= deadlineDate order by occurence descending
因此,我首先要考虑的是:如何编制索引。 我是否应该只为所有三个字段(EDIEL,Occurence和CreatedDate)创建一个单字段索引? 或者我应该看看创建一个复合索引吗? 如果是这样,则应在compount索引中包括哪些字段? EDIEL和出现?
我有点困扰的第二件事是应该在哪里以及何时创建这些索引。 我应该在应用程序启动时在Application_Start()
创建它们吗? 还是应该通过mongodb shell一次创建它们,仅此而已?
任何帮助/提示/见解都非常感激:-)
您需要设置复合索引。
db.MeteredDataReading.createIndex( { "EDIEL": 1, "occurence": 1, "CreatedDate":1 } )
MongoDb索引是数据库设计和应用程序性能的非常重要的方面。
您也可以使用explain()检查查询是否在进行列读取。 如果他们正在进行列扫描,则需要建立索引并确保查询达到索引并且避免了磁盘读取。
`db.MeteredDataReading.find({$query:
{ "EDIEL": 1234,
{"occurence" :$gte: ISODate("2010-04-29T00:00:00.000Z"),
$lte: ISODate("2010-05-01T00:00:00.000Z")},
"CreatedDate":$lte: ISODate("2010-05-01T00:00:00.000Z")},
$orderby: { occurence : -1 } }).explain("executionStats")`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.