Indexing 如何在SQL CE中高效地搜索作为道路交叉点的附近地理节点?

Indexing 如何在SQL CE中高效地搜索作为道路交叉点的附近地理节点?,indexing,sql-server-ce,storage,spatial,Indexing,Sql Server Ce,Storage,Spatial,我有以下疑问: var nodes = DB.Nodes .Where(x => x.Lon > 486400 && x.Lon < 486600 && x.Lat > 5025100 && x.Lat < 5025300)

我有以下疑问:

var nodes = DB.Nodes
              .Where(x =>    x.Lon > 486400
                          && x.Lon < 486600
                          && x.Lat > 5025100
                          && x.Lat < 5025300)
              .Join(DB.RoadNodes, x => x.Id, y => y.NodeId, (x, y) => x);
var nodes=DB.nodes
其中(x=>x.Lon>486400
&&x.Lon<486600
&&x.纬度>5025100
&&x.纬度<5025300)
.Join(DB.RoadNodes,x=>x.Id,y=>y.NodeId,(x,y)=>x);
这将搜索靠近某个位置的
DB.nodes
中的所有节点,然后通过与
DB.RoadNodes
进行连接来检查该节点是否为道路交叉口;但是,这需要几秒钟的时间,速度很慢

看起来我要做两件事:

  • 优化
    Where
    部分,该部分本身需要
    ~5
    秒,我听说了一些关于Spatial的事情

  • 优化
    Join
    部分,该部分仅需剩余的
    ~15
    秒,我需要一个索引,对吗

  • 所以我有两个问题:

  • 如何在SQL Server Compact Edition中进行空间存储和搜索?

    如果这不受支持,我如何解决这个问题

  • 我需要索引哪些列才能使此查询充分工作?

    似乎索引RoadNodes的NodeId并不能真正改善查询

  • 请注意,我仅限于SQL CE,因为我打算在Windows Phone 7上运行它

    还有一个节点,我需要从中获取一个
    Unique()
    ,这会使查询稍微长一点,但我想如果查询本身运行得很快,这应该不是问题。只是他加入会带来双重结果,还是我应该用另一种方式加入