我的iPhone应用程序中有一个sqlite数据库,我可以通过Core Data框架访问它.我正在使用NSPredicates来查询数据库.
我正在构建一个搜索功能,需要搜索包含文本的六个不同的varchar字段.目前,它非常慢,我需要提高性能,可能在sqlite数据库中.是否最好在所有这些列上创建索引?或者更好的是构建一个自定义索引表,将这六列扩展为多行,每行包含一个单词和它匹配的ID?还有其他建议吗?
您可以采取一些措施来提高在sqlite数据库中搜索文本的性能.虽然Core Data将您从底层商店中抽象出来,但是当您使用sqlite支持商店时,了解正在发生的事情可能是件好事.
如果我们假设您正在对这些字段进行子字符串搜索,那么您可以采取一些措施来提高搜索性能.Apple建议使用派生属性.这相当于在您的模型中维护用于搜索的属性的标准化版本.派生属性应该以可以索引的方式完成.然后使用二元运算符> <=等表达您对此派生属性的搜索.
我发现这样做可以将搜索范围从1秒减少到100毫秒以下.
为了清楚起见,我建议您查看ADC示例http://developer.apple.com/mac/library/samplecode/DerivedProperty/