Rob*_*ert 1 sql sqlite iphone core-data ios
我有一个巨大的核心数据数据库,包含地图上路径的经度和纬度.
我有一个叫做方式的对象,它由一组有序的节点组成(lon,lat).我还将封闭盒存放在路上(minLon,minLat,maxLon,maxLat ......).

我的查询在地图的特定区域中查找所有方式:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"minLon < %f AND maxLon > %f AND minLat < %f AND maxLat > %f",
maxLon, minLon, maxLat, minLat];
Run Code Online (Sandbox Code Playgroud)
它的水坝慢了!
我加快查询的想法是以某种方式将数据按方形区域分割(多个表?多个.sqllite文件?创建位置的哈希值?)因此搜索的数据较少.
我怎样才能做到这一点?
您可以通过将Way实体中的最小/最大值存储为缩放整数而不是浮点数来加快查询速度.选择一个缩放因子,为您提供可接受的区域分辨率,在存储时使用它来预分级值,并在执行查询时使用相同的比例因子.
您还可以查看将四叉树数据结构添加到核心数据模型,以便在所需区域中的方式中进行归位.
SQlite将在复合谓词失败的第一次测试中拯救,因此首先进行最便宜的测试.
另请参阅为这4个属性启用索引.
说实话,我很惊讶这很慢.您在数据库中拥有多少总方式,以及您想要查询的区域中通常有多少种方式?
您是否尝试启用SQL调试以查看实际对数据库运行的查询?(提示:在Scheme编辑器中为Run行为添加-com.apple.CoreData.SQLDebug 1作为命令行参数)
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |