我正在阅读关于核心数据的文档,希望加快我的搜索速度。我找到了以下内容,并对其含义略有不确定:
另一方面,SQL商店, 编译谓词和排序 SQL的描述符并评估 导致数据库本身。这是 主要是为了 性能数据库要快得多 在这(这是他们的设计 因为 - 但它意味着评估 发生在非Cocoa环境中, 等排序描述符(或 谓词)依赖Cocoa不能 工作。支持的排序选择器是 比较:和caseInsensitiveCompare: 请注意,此外您无法排序 关于瞬态属性的使用 SQLite商店。
这是否意味着他们建议在从sqlite存储中获取托管对象时不使用谓词或排序描述符?
我目前有一个FetchRequest,我传递了以下内容:
NSPredicate *thingSearchPredicate =
[NSPredicate predicateWithFormat:@"label BEGINSWITH[cd] %@", searchText];
NSSortDescriptor *sortDescriptor =
[[NSSortDescriptor alloc] initWithKey:@"label" ascending:YES];
搜索有效,但我认为我使用的是依赖可可的谓词。 BEGINSWITH是我假设比较:选项:范围:缩写,其中范围是搜索字符串长度。事实上是变音符号不敏感似乎肯定会反驳上面的建议,所以这只是意味着在获取该实体的所有实例后它们会自动为我评估?
还有其他方法可以加快搜索速度吗?
答案 0 :(得分:0)
如果核心数据无法在SQL中表达您的查询,您将看到错误。该文档指定表达式被采用并转换为SQL并出于性能原因传递给sqllite。如果它不能用SQL表示,它不会退化为Cocoa。
它们意味着什么是谓词在SQL中无法表达,因此根本不起作用。
此外,你需要使用他们的排序选择器,你不能自己创建,因为他们不知道如何将Cocoa中的任意对象转换为SQL。