Swift CoreData:NSSortDescriptor在很大的数据库上的性能很差

时间:2019-01-08 08:54:21

标签: swift performance core-data full-text-search

在一个使用大型数据集(大约13Gb)的项目中,我遇到了一个主要问题,我需要在其上实现全文搜索。最初,我在请求中使用搜索词 CONTAINS [cd] 进行搜索时性能很差,但最终通过在Swift对象而不是Core Data发送的SQL查询中进行搜索来解决了这一问题。我现在的问题是使用NSSortDescriptor来组织我的结果。

这是我的要求:

        let fetchRequestEntity = NSFetchRequest<NSFetchRequestResult>(entityName: "Entity")
        fetchRequestEntity.predicate = NSPredicate(format: "entityRelated.stringAttribute != \"\" AND entityRelated.foreignId = %@", foreignId, searchTerm)
        fetchRequestEntity.propertiesToFetch = ["entityId"]
        fetchRequestEntity.returnsDistinctResults = true
        fetchRequestEntity.fetchLimit = 1
        let sort = NSSortDescriptor(key: #keyPath(Entity.entityRelated.stringAttribute), ascending: true)
        fetchRequestEntity.sortDescriptors = [sort]
        fetchRequestEntity.fetchOffset = fetchOffset+nbOffset

然后我重复此请求,直到得到N个结果(此处N = 20)。

如果不进行排序,则对某个搜索词的20个结果收取不到0.5s的费用,但是对于排序,大约需要16s,这是不可接受的。

有关此问题的任何提示吗?

0 个答案:

没有答案