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

Objective c iOS核心数据索引属性未提高性能,objective-c,ios,xcode,core-data,indexing,Objective C,Ios,Xcode,Core Data,Indexing,我有一个运行在iPad上的核心数据数据库。它有30000个联系人,具有firstname、lastname等属性 使用NSCompoundPredicate的搜索性能不是很好。我正在使用两个LIKE谓词(firstname和lastname),搜索30000个联系人大约需要1500毫秒。然后我尝试将“index”属性添加到firstname和lastname字段(使用XCode数据建模器UI),但性能似乎完全相同 自从将索引属性添加到这两个字段之后,我已经从数据库中删除了所有对象并重新填充了它。

我有一个运行在iPad上的核心数据数据库。它有30000个联系人,具有firstname、lastname等属性

使用NSCompoundPredicate的搜索性能不是很好。我正在使用两个LIKE谓词(firstname和lastname),搜索30000个联系人大约需要1500毫秒。然后我尝试将“index”属性添加到firstname和lastname字段(使用XCode数据建模器UI),但性能似乎完全相同

自从将索引属性添加到这两个字段之后,我已经从数据库中删除了所有对象并重新填充了它。为了开始使用索引,我还需要做些什么吗?我是否应该期望通过索引复合谓词中使用的两个字段来提高性能

我正在一台真正的设备(iPad3)上运行。1500毫秒来搜索30000个联系人记录似乎不太好-这是课程的标准吗?


非常感谢。

一样,无论您正在搜索的属性是否索引,搜索都是昂贵的

许多应用程序——包括苹果自己的应用程序——通过以用户不会注意到的方式限制搜索来避免这个问题。例如,在像Contacts这样的应用程序中键入内容时进行搜索并不是真的希望将查询与所有可能的人名子字符串相匹配;相反,它匹配的是名字或姓氏以查询开头的人

<> P>为了进一步优化,还可以考虑,如果没有完整的Unicode精明、案例和diACCORCE意识匹配,<>代码> 和初学者> 获取您。苹果的例子展示了如何通过存储搜索属性的“规范化”(即所有大小写都相同,没有变音符号,其他无关内容消失)版本,并使用依赖于词典排序的谓词(例如
normalizedLastName>=“foo”&&normalizedLastName<“fop”
)来获得更好的性能


关于这些和相关技巧的更多细节可以在过去WWDC的一些核心数据会话中找到,尤其是。

您是否将它们加载到tableView?稍后我会加载,但我正在计时搜索,搜索需要时间(我只是在搜索期间构建一个匹配对象的NSArray)您是否从核心数据中获取30000个联系人?如果是这样,您一次可以获取多少联系人?没有,但数据库中有30000个联系人。通常搜索只会返回一小部分。您的查询是否以通配符开始?除此之外,关于索引在这种情况下不应提高性能的信息会很有帮助,我认为。以下是有关为什么like运算符以通配符开始时速度会特别慢的更多信息,与仅包含一个相反: