Как эффективно искать в SQL CE близлежащие географические узлы, являющиеся транспортными развязками? - PullRequest
2 голосов
/ 06 февраля 2012

У меня есть следующий запрос:

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;однако, это занимает несколько секунд, что медленно.

Похоже, я должен сделать две вещи здесь:

  1. Оптимизация части Where, которая занимает ~5секунд, я что-то слышал о Spatial?

  2. Оптимизация части Join, которая самостоятельно занимает оставшиеся ~15 секунд, мне нужен индекс, верно?

Итак, у меня есть два вопроса по этому поводу:

  1. Как я могу выполнять пространственное хранение и поиск в SQL Server Compact Edition?

    Если это не поддерживается, как мне обойти эту проблему?

  2. Какие столбцы мне нужно проиндексировать, чтобы этот запрос работал достаточно?

    Похоже, что индексирование NodeId RoadNodes на самом деле не улучшает запрос.

Обратите внимание, что я ограничен SQL CE, так как намерен запустить этона Windows Phone 7.

Также узел, который мне нужен, чтобы взять Unique() из этого, что делает запрос немногодольше, но я думаю, что это не должно быть проблемой, если сам запрос выполняется быстро.Просто присоединение приводит к двойным результатам, или я должен присоединиться по-другому?

...