繁体   English   中英

ASP.NET MVC中的MongoDb索引

[英]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; }
}

现在,当涉及到索引时,我有点迷茫。 我们使用最的领域是: EDIELOccurenceCreatedDate示例查询(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM