0
我一直试图调试CoreData提取速度非常慢,sqlite表只有1900个记录,它需要1.7秒才能执行提取。我已经完全排除了谓词,所以归结为排序。核心数据在提取方式中排序比在提取后排序慢?
如果我在提取请求中排序,则需要1.7秒。
// 1.7 seconds
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"dateRaised" ascending:NO],
[NSSortDescriptor sortDescriptorWithKey:@"clientCreatedAt" ascending:NO]];
items = [managedObjectContext executeFetchRequest:request error:nil];
如果我先获取然后做数组排序它需要0.2秒。
// 0.2 seconds
items = [managedObjectContext executeFetchRequest:request error:nil];
items = [items sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"dateRaised" ascending:NO],
[NSSortDescriptor sortDescriptorWithKey:@"clientCreatedAt" ascending:NO]]];
这是为什么,我该怎么做才能改善CoreData获取?
你有没有索引? (对于这个查询,复合索引将是最优的。) –
我没有添加任何超出这些CoreData添加额外的索引自动。我会惊讶地发现1900行的索引很重要,但这只是一张小桌子。 – trapper