性能不佳Core Data CONTAINS谓词

时间:2011-10-05 09:07:41

标签: iphone objective-c ios ipad core-data

我正在使用NSFetchedResultsController在UITableView中显示一些搜索结果。搜索结果由以下谓词请求:

[NSPredicate predicateWithFormat:@"(plainText CONTAINS %@)", _searchString]

搜索所经过的实体有大约25.000个对象。 plainText属性包含一个String值,每个值约700个单词。

此搜索大约需要20秒才会太慢。

有没有办法优化性能?

我观看了WWDC 2010 Session 137,她正在讨论将关键字规范化为单独的实体以避免使用CONTAINS。这是改进它的一种方法,每个只有700个关键字。制作700 x 25.000 = 17.500.000关键字。我怀疑它会有所改善。我应该试试吗?

1 个答案:

答案 0 :(得分:3)

在一个字符串中搜索25,000个实体中的700字属性确实会很慢,是的。你的wwdc想法是正确的 - 你想要创建一个单独的实体,它是一个单独的'关键字',与你的实体有多对多的关系。这样,您将很快找到一个关键字实体,然后很快找到25,000个实体。这样你就可以避免搜索每一个很长的字符串。

tldr;是的,你应该试试