针对最近修改的对象的优化核心数据提取

时间:2011-04-25 21:33:18

标签: ios core-data query-optimization

我正在尝试优化Core Data的获取请求。

我有一个名为lastModifiedDate的实体,它是一个NSDate对象。我需要在数据库中查询最新的lastModifiedDate属性。我有以下代码在小数据集中工作正常,但是对于具有40k记录的数据库,此查询运行就像垃圾一样。

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:&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 个答案:

答案 0 :(得分:1)

将lastModifiedDate属性标记为数据模型中的索引使得此查询非常快,如果有更好的方法可以做到这一点仍然会感兴趣。