Оптимизированная выборка основных данных для самого последнего измененного объекта

#ios #core-data #query-optimization

#iOS #основные данные #оптимизация запроса #core-data #оптимизация запросов

Вопрос:

Я пытаюсь оптимизировать запрос на выборку основных данных.

У меня есть объект с атрибутом LastModifiedDate, который является объектом NSDate. Мне нужно запросить в моей базе данных самое последнее свойство LastModifiedDate. У меня есть следующий код, который отлично работает с небольшими наборами данных, но с базой данных, содержащей 40 тысяч записей, этот запрос выполняется как дерьмо.

 NSDate *mostRecentLastModifiedDate = nil;
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:entityName inManagedObjectContext:self.managedObjectContext];

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
[request setFetchLimit:1];
[request setPropertiesToFetch:[NSArray arrayWithObject:@"lastModifiedDate"]];

NSSortDescriptor *dateSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastModifiedDate" ascending:NO];

[request setSortDescriptors:[NSArray arrayWithObject:dateSortDescriptor]];
[dateSortDescriptor release];

NSError *error = nil;
NSArray *result = [self.managedObjectContext executeFetchRequest:request error:amp;error];
if (error) {
    NSLog(@"Error fetching most recent lastModifiedDate property for %@ entity, error details: %@", entityName, error);
} else if ([result count] > 0) {
    mostRecentLastModifiedDate = [[[[result objectAtIndex:0] valueForKey:@"lastModifiedDate"] copy] autorelease];
} else {
    mostRecentLastModifiedDate = [NSDate distantPast];
}

[request release];

return mostRecentLastModifiedDate;
  

Ответ №1:

Пометка атрибута LastModifiedDate как индексированного в модели данных сделала этот запрос чрезвычайно быстрым, все равно было бы интересно, есть ли лучший подход для этого.