我的 iPhone 应用程序中有一个 sqlite 数据库,我可以通过 Core Data 框架访问该数据库。我正在使用 NSPredicates 来查询数据库。
我正在构建一个搜索函数,需要搜索六个包含文本的不同 varchar 字段。目前,它非常慢,我需要提高性能,可能是在 sqlite 数据库中。最好在所有这些列上创建索引吗?或者构建一个自定义索引表将这六列扩展为多行,每行包含一个单词及其匹配的 ID 会更好吗?还有其他建议吗?
最佳答案
您可以采取一些措施来提高在 sqlite 数据库中搜索文本的性能。尽管 Core Data 将您从底层存储中抽象出来,但了解当您的存储使用 sqlite 支持时发生的情况可能会很好。
如果我们假设您正在对这些字段进行子字符串搜索,则可以采取一些措施来提高搜索性能。 Apple 建议使用派生属性。这相当于在模型中维护用于搜索的属性的规范化版本。派生属性应该以可以索引的方式完成。然后,您可以使用二元运算符 > <= 等根据此派生属性表达搜索。
我发现这样做可以将我们的搜索时间从大约 1 秒缩短到 100 毫秒以下。
为了清楚起见,我建议查看 ADC 示例 http://developer.apple.com/mac/library/samplecode/DerivedProperty/
关于iphone - sqlite 索引性能建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1862771/