0
我正在使用NSFetchedResultsController在UITableView中显示一些搜索结果。搜索结果由以下谓词请求:性能不佳核心数据CONTAINS谓词
[NSPredicate predicateWithFormat:@"(plainText CONTAINS %@)", _searchString]
搜索正在经历的实体约有25.000个对象。 plainText属性包含一个字符串值,每个约700字。
这个搜索大约需要20秒,这太慢了。
有没有什么办法来优化性能?
我观看了WWDC 2010 Session 137,她正在讨论将关键字规范化为单独的实体以避免使用CONTAINS。这是改进它的一种方法,每个我只有700个关键字。制作700 x 25.000 = 17.500.000个关键字。我怀疑它会改善。我应该尝试吗?
尽管这个想法确实非常实用,但我会小心数据库的大小是否重要,因为这种方法将会极大地增加它的大小。 – Craimasjien
直到尝试才会知道。它可以减小尺寸,因为每个关键字都会存在一次。您将为每个实体存储约700 * 2 * sizeof(主键) - 关系表将包含实体的pk和关键字的pk。但是你会摆脱700 *(单词的平均长度)。我敢打赌,它只是一个洗脸。 – Colin
嗨科林,谢谢你的回答。我确实创建了与Part实体(最初包含文本)具有多对多关系的Keyword实体。现在我需要最快的查询来获取包含所有查询关键字的部分。我用关键字实体上的NSFetchRequest用谓词(word == \“testword \”AND word = \“testword2 \”)尝试了这种方式,我很快得到了关键字。只有当我循环访问关键字并获得部分内容时,才需要很长时间。你知道更快的方法来做到这一点吗? –