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毫秒似乎并不那么好 – 它是否适合课程? 非常感谢. 解决方法
无论您搜索的属性是否已编入索引,LIKE搜索都很昂贵.
许多应用程序 – 包括Apple自己的应用程序 – 通过以用户不会注意到的方式限制搜索来避免此问题.例如,在类似于“联系人”的应用程序中进行搜索时,实际上并不希望将查询与人名的所有可能子字符串相匹配;相反,它匹配名字以查询开头的名字. 为了进一步优化,还要考虑到你可能无法获得LIKE和BEGINSWITH为您提供的完全符合Unicode,case和diacritic感知的匹配. Apple的DerivedProperty示例显示了如何通过存储搜索属性的“规范化”(即所有相同的情况,没有变音符号,其他无关的东西)版本并使用依赖于词典排序的谓词(例如normalizedLastName> =)来获得更好的性能. “foo”&& normalizedLastName<“fop”). 关于这些和相关技巧的更多细节可以在过去的WWDC的一些核心数据会议中找到,尤其是2010 Session 137,“Optimizing Core Data Performance on iPhone OS”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |