【发布时间】:2017-12-19 00:31:37
【问题描述】:
我一直在尝试调试 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 行很重要,但那是一张很小的表。
标签: sqlite core-data nsfetchrequest