我有以下查询:
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);
搜索某个位置附近的DB.Nodes
中的所有节点,然后通过DB.RoadNodes
加入来检查该节点是否为道路交叉点;然而,这需要几秒钟,这很慢。
看起来我必须在这做两件事:
优化自Where
秒的~5
部分,我听说过有关Spatial的内容?
优化自己需要剩余Join
秒的~15
部分,我需要一个索引,对吗?
所以我有两个问题:
如何在SQL Server Compact Edition中进行空间存储和搜索?
如果不支持此功能,我该如何解决此问题?
我需要为哪个列编制索引才能使此查询充分发挥作用?
似乎索引RoadNode的NodeId并没有真正改善查询。
请注意,由于我打算在Windows Phone 7上运行它,因此我受限于SQL CE。
此外,我需要从中获取Unique()
的节点,这会使查询稍长一些,但我认为如果查询本身运行速度快,则不应该成为问题。只是他加入会引入双重结果,还是应该以其他方式进行加入?