swift 实体中记录的快速计数

hgncfbus  于 2023-04-19  发布在  Swift
关注(0)|答案(1)|浏览(118)

我想计算模型中每个实体的所有记录,以获得它所包含内容的全局概述。
我使用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)")
    }
}
4ioopgfo

4ioopgfo1#

检查Core Data调试日志,可以清楚地看到count(for:)被转换为SQL语句SELECT COUNT(*) FROM ...,并且没有其他方法比计算表中的行数(对象)更快。
由于返回的唯一内容是一个Int值,因此使用count(for:)不会缓存任何内容

相关问题