Понимание индексации драйвера MongoDb .NET

В настоящее время я работаю над приложением, в котором MongoDb используется для довольно большого объема данных.

Объекты, которые я храню в MongoDb, выглядят так:

public class PowerPlantDataReading
{
    [BsonId]
    public int ID { get; set; }
    [BsonElement("EDIEL")]
    public string EDIEL { get; set; }
    [BsonElement("EndDate")]
    public DateTime EndDate { get; set; }
    [BsonElement("Created")]
    public DateTime Created { get; set; }

    [BsonElement("DataReading")]
    public DataReading DataReading { get; set; }
}

public class DataReading
{
    [BsonElement("Version")]
    public int Version { get; set; }

    [BsonElement("OriginalId")]
    public int OriginalId { get; set; }

    [BsonElement("Unit")]
    public string Unit { get; set; }

    [BsonRepresentation(MongoDB.Bson.BsonType.Double)]
    [BsonElement("Quantity")]
    public decimal Quantity { get; set; }

    [BsonElement("Quality")]
    public string Quality { get; set; }

    [BsonElement("StartDate")]
    public DateTime StartDate { get; set; }        
}

И запрос, который я запускаю против MongoDb, выглядит так:

DateTime startDateUtc = DateTime.UtcNow.AddDays(-5);
DateTime endDateUtc = DateTime.UtcNow;

var queryBuilder = Builders<PowerPlantDataReading>.Filter;
var filter = queryBuilder.Where(x => x.EndDate >= startDateUtc && x.EndDate < endDateUtc);

var query = collection.Find(filter).ToListAsync();

return query.Result;

Запрос возвращает около 825 000 объектов, но для его выполнения требуется более 4 минут.

Затем я попытался создать такой индекс:

IMongoCollection<PowerPlantDataReading> collection = GetCollection();
collection.Indexes.CreateOne(Builders<PowerPlantDataReading>.IndexKeys.Descending(x => x.EndDate));

Затем снова запустил запрос, но, к моему удивлению, это не имело никакого значения.

Я не уверен, правильно ли я создаю индекс? Если нет, то как мне создать свой индекс, чтобы получить максимально возможную производительность для запроса?

Заранее спасибо.

0 ответов

Другие вопросы по тегам