私は次のクエリを持っています:
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
で結合を取ってノードが道路ジャンクションかどうかをチェックします。しかし、これには数秒かかりますが遅いです。
私はここで2つのことをしなければならないように見えます:
Optimize the Where
part which takes ~5
seconds on its own, I heard something about Spatial?
Optimize the Join
part which takes a remaining ~15
seconds on its own, I need an index, right?
だから私はこれについて2つの質問があります:
How can I do spatial storage and searching in SQL Server Compact Edition?
If this is unsupported, how do I work around this issue?
Which columns do I need to index for this query to work sufficiently?
It seems like indexing the NodeId of RoadNodes doesn't really improve the query.
これをWindows Phone 7で実行する予定であるため、SQL CEに制限されていますのでご注意ください。
また、クエリを少し長くする Unique()
を取る必要があるノードもありますが、クエリ自体が高速で実行されていると問題ではないはずです。彼が参加したのは二重の結果を紹介することだけです。あるいは、私は他の方法で結合を行うべきですか?