iPhone上的复杂查询的NSArray与SQLite

时间:2010-05-02 06:19:10

标签: iphone sqlite nsarray

为iPhone开发,我有一些点,我需要进行复杂的查询。例如:“有多少个点的y坐标为10”和“返回所有点的X坐标在3到5之间,y坐标为7”。

目前,我只是循环遍历NSArray的每个元素,并检查每个元素是否与我的查询匹配。编写查询虽然很痛苦。 SQLite会好得多。我不确定哪个会更高效,因为SQLite数据库驻留在磁盘而不是内存(据我所知)。 SQLite会在这里效率更高或效率更高吗?或者除了这些我没有想到的方法之外,还有更好的方法吗?我需要使用多组点数执行多次查询数千次,因此最佳性能非常重要。

3 个答案:

答案 0 :(得分:4)

您可以将SQLite用作内存数据库。只需使用文件名":memory:"对其进行初始化即可。由于SQL引擎和动态类型系统的开销,SQLite将永远不会像精心手工制作的数据结构那样运行。但是,由于 ad hoc SQL的方便性和完整性,它仍然可以产生非常好的结果。您甚至可以将索引添加到内存数据库中,以帮助提高查询性能。

答案 1 :(得分:0)

如果性能是你的关键标准,那么你应该使用浮点数组来代表你的点,而不是NSArray,因为它的速度和它一样快。 如果您真的想使用sqlite,可以将其配置为在内存数据库中运行,有关详细信息,请参阅here

如果你真的想要了解性能,你可能会考虑使用LLVM来动态生成机器代码以迭代你的数据集,但这可能是过度杀戮;)

答案 2 :(得分:0)

我认为Core Data和SQLite都实现了缓存,因此您可以轻松查询和关系数据库的强大功能。应该值得调查。