iOS核心数据索引属性未提高性能

Jou*_*man 4 indexing xcode core-data objective-c ios

我有一个在iPad上运行的Core Data数据库.它有30,000个联系人,其中包含firstname,lastname等属性.

使用NSCompoundPredicate,搜索性能不佳.我或者是两个LIKE Predicates(在名字和姓氏上),它需要大约1500毫秒来搜索30,000个联系人.然后我尝试将'indexed'属性添加到firstname和lastname字段(使用XCode Data Modeller UI),但性能似乎完全相同.

由于将Indexed属性添加到两个字段,我已从数据库中删除了所有对象并重新填充它.我是否需要做更多的事情才能开始使用索引,我是否希望通过索引复合谓词中使用的两个字段来提高性能?

我正在使用真实设备(iPad3).搜索30,000个联系人记录的1500毫秒似乎并不那么好 - 它是否适合课程?

非常感谢.

ric*_*ter 8

LIKE 无论您搜索的属性是否已编入索引,搜索都很昂贵.

许多应用程序 - 包括Apple自己的应用程序 - 通过以用户不会注意到的方式限制搜索来避免此问题.例如,在类似于"联系人"的应用程序中进行搜索时,实际上并不希望将查询与人名的所有可能子字符串相匹配; 相反,它匹配名字以查询开头的名字.

为了进一步优化,还认为你也许可以逃脱不完整的Unicode精明,个案和音调符号感知匹配LIKE,并BEGINSWITH得到你.Apple的DerivedProperty示例显示了如何通过存储搜索属性的"规范化"(即所有相同的情况,没有变音符号,其他无关的东西)版本以及使用依赖于词典排序的谓词(例如normalizedLastName >= "foo" && normalizedLastName < "fop")来获得更好的性能.

有关这些和相关技巧的更多详细信息可以在过去WWDC的一些核心数据会议中找到,尤其是2010年会议137,"优化iPhone OS上的核心数据性能".