我想计算模型中每个实体的所有记录,以获得它所包含内容的全局概述。
我使用context.count(for: request)
来获取全局计数,但是在一个有大约400000条记录的实体中执行需要大约10秒。
有没有更快的方法来查询记录的数量?
我想context.count()
是相当优化的,但也许它仍然会把一些我不需要的东西取该高速缓存中?
验证码:
var counts : [String: Int] = [:]
for entity in self.container.managedObjectModel.entities {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: entity.name!)
do {
let count = try mainContext.count(for: request)
counts[entity.name!] = count
} catch {
Logger.error("Couldn't count entity \(entity.name)")
}
}
1条答案
按热度按时间4ioopgfo1#
检查Core Data调试日志,可以清楚地看到
count(for:)
被转换为SQL语句SELECT COUNT(*) FROM ...
,并且没有其他方法比计算表中的行数(对象)更快。由于返回的唯一内容是一个
Int
值,因此使用count(for:)
不会缓存任何内容