gpt4 book ai didi

objective-c - iOS 核心数据索引属性没有提高性能

转载 作者:可可西里 更新时间:2023-11-01 05:15:05 25 4
gpt4 key购买 nike

我有一个在 iPad 上运行的 Core Data 数据库。它有 30,000 个联系人,具有名字、姓氏等属性。

使用 NSCompoundPredicate 的搜索性能不是很好。我正在使用两个 LIKE 谓词(在名字和姓氏上),搜索 30,000 个联系人大约需要 1500 毫秒。然后,我尝试将“索引”属性添加到名字和姓氏字段(使用 XCode Data Modeller UI),但性能似乎完全相同。

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

我在真实设备(iPad3)上运行。搜索 30,000 条联系人记录需要 1500 毫秒,这似乎不太好 - 这是否符合类(class)标准?

非常感谢。

最佳答案

LIKE无论您正在搜索的属性是否已编入索引,搜索都是昂贵的。

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

为了进一步优化,还请考虑一下,如果没有完整的 Unicode-savvy、大小写和变音符号匹配 LIKE,您可能会逃脱。和 BEGINSWITH明白。苹果的DerivedProperty示例显示了如何通过存储搜索属性的“规范化”(即所有相同的大小写,没有变音符号,其他无关的东西消失)版本并使用依赖于词典顺序的谓词(例如 normalizedLastName >= "foo" && normalizedLastName < "fop" )来获得更好的性能。

关于这些和相关技巧的更多细节可以在过去的 WWDC 的一些核心数据 session 中找到,尤其是 2010 Session 137, "Optimizing Core Data Performance on iPhone OS" .

关于objective-c - iOS 核心数据索引属性没有提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9967625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com