我在iOS 5.1.1的ipad上运行了一个coredata数据库。我的数据库中有大约50,000家公司。我已经在公司名称属性上创建了一个索引。我正在搜索此属性,有时会使用fetchRequest返回数千条记录。
当返回几千条记录时,从获取返回可能需要几秒钟。这使得提前输入搜索非常笨重。
我预计未来会有更大的数据库。我有什么选择来实现真正快速的搜索功能?
感谢。
答案 0 :(得分:3)
我建议观看最近几个WWDC的核心数据性能视频。他们经常谈论改善这种瓶颈的策略。视频中的一些建议:
searchString
字段,然后使用<
,<=
或BEGINSWITH
搜索该字段。避免使用MATCHES
和通配符。NSFetchRequest
和fetchLimit
fetchBatchSize
返回的结果数量
一些视频的指针(其他年份也有更多):
WWDC 2012:会议214 - 核心数据最佳实践:45:00
WWDC 2010:Session 137 - 在iPhone OS上优化核心数据性能:34:00
答案 1 :(得分:1)
虽然核心数据在许多情况下是正确的工具,但它绝不是一颗银弹。
查看这篇文章,讨论一些优化策略以及SQL数据库是您更好的选择而不是核心数据的情况:
http://inessential.com/2010/02/26/on_switching_away_from_core_data
在这种情况下,您可能更好地使用SQL数据库而不是Core Data,因为当您尝试访问Core Data实体上的属性值时,通常会导致错误并将对象拉入活动内存...绝对可以有性能和速度成本。使用真正的数据库 - 核心数据不是真正的数据库,请参阅http://cocoawithlove.com/2010/02/differences-between-core-data-and.html - 您可以查询数据库而无需从中创建对象。