【发布时间】:2011-05-04 20:55:28
【问题描述】:
我在使用 iOS 4.3.2 的 iPad 上运行了以下核心数据获取请求。
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"feed.account.name == %@ AND feed.feedType == %@", accountName,feedType];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date"
ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
fetchedResultsController=[self createFetchedResultsController:@"RssFeedItem" predicate:predicate sortDescriptors:sortDescriptors];
[fetchedResultsController.fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:@"url",@"headline",@"isRead",@"origin",@"originId",@"date",nil]];
[fetchedResultsController.fetchRequest setFetchLimit:500];
[fetchedResultsController setDelegate:self];
[fetchedResultsController performFetch:&error];
return [fetchedResultsController fetchedObjects];
我在 RssFeedItem 表的 SQLite 数据库中有大约 688 行数据,而在所有其他表中不到 100 行。该查询使用调试日志记录为:
CoreData: sql: SELECT t0.Z_ENT, t0.Z_PK, t0.ZURL, t0.ZHEADLINE, t0.ZISREAD, t0.ZORIGIN,
CoreData: annotation: sql connection fetch time: 3.3854s
CoreData: annotation: total fetch execution time: 3.4178s for 688 rows.
而且运行速度非常慢(超过 3 秒)。我对所有必需的搜索字段和排序字段都有索引。我假设也许 2 方式加入让它变慢了,但不知道为什么它会那么慢。有什么方法可以优化此代码或查询,还是我应该查看其他内容?
【问题讨论】: