Насколько хорош тип географии в SQL Server 2008? - PullRequest
7 голосов
/ 05 сентября 2011

У меня есть большая база данных, заполненная клиентами, реализованная в SQL Server 2005. Каждый из клиентов имеет широту и долготу, представленную как Decimal(18,15).Самый важный поисковый запрос в базе данных пытается найти всех клиентов, близких к определенному местоположению, например:

(Addresses.Latitude - @SearchInLat)  BETWEEN -1 * @LatitudeBound AND @LatitudeBound)
AND ( (Addresses.Longitude - @SearchInLng) BETWEEN -1 * @LongitudeBound AND @LongitudeBound)

Итак, это очень простой метод.@LatitudeBound и @LongitudeBound - это просто числа, используемые для отвода всех клиентов в пределах грубого ограничивающего прямоугольника точки @SearchInLat, @SearchInLng.Как только результаты попадают на клиентский ПК, некоторые результаты отфильтровываются, так что вместо прямоугольника есть ограничивающий круг.(Это делается на клиентском ПК, чтобы избежать вычисления квадратных корней на сервере.)

Этот метод работал достаточно хорошо в прошлом.Однако теперь мы хотим, чтобы поиск делал более интересные вещи - например, чтобы количество возвращаемых результатов было более предсказуемым, или чтобы пользователь динамически увеличивал размер радиуса поиска.Для этого я искал возможность обновления до SQL Server 2008 с его типом данных Geography, пространственными индексами и функциями расстояния.У меня такой вопрос: насколько они быстры?

Преимущество простого запроса, который мы имеем в данный момент, состоит в том, что он очень быстрый и не требует значительных затрат, что важно, поскольку он вызывается очень часто.Насколько быстрым будет запрос, основанный на чем-то вроде этого:

SearchInPoint.STDistance(Addresses.GeographicPoint) < @DistanceBound

для сравнения?Хорошо ли работают пространственные индексы и быстро ли работает STDistance?

1 Ответ

8 голосов
/ 07 сентября 2011

Если вы обрабатываете только стандартную пару Lat / Lng, как вы описываете, и все, что вы делаете, - это простой поиск, то, вероятно, вы не сможете значительно увеличить скорость с помощью Geometry Type.

Однако, если вы хотите стать более предприимчивым, как вы заявляете, тогда переключение на использование типов геометрии откроет вам целый мир новых возможностей, а не только поисков.

Например,(Основываясь на проекте, над которым я работаю), вы можете (если это данные Великобритании) скачать определения полигонов для всех городов / поселков / городов для данной области, а затем сделать перекрестные ссылки для поиска в определенном городе, или если выИмея дорожную карту, вы могли найти, какие клиенты жили рядом с основными маршрутами доставки, автомагистралями, первичными дорогами, всевозможными вещами.

Вы также можете сделать несколько очень необычных отчетов, представьте карту городов, где каждый планбыл нанесен на карту, затем закрашен цветом, чтобы показать плотность клиентов в области, некоторую простую геометрию SQLлегко вернет вам счет прямо из базы данных, чтобы отобразить такую ​​информацию.

Затем есть отслеживание, я не знаю, какие данные вы обрабатываете, или почему у вас есть клиенты, но если вы что-то доставили,введя координаты фургона, вы узнаете, насколько близко он находится к данному клиенту.

Что касается вопроса, быстро ли работает STDistance?ну, на самом деле это трудно сказать, я думаю, что лучший вопрос: «Быстрее по сравнению с…», трудно сказать да или нет, если у вас нет с чем сравнить.

Пространственные индексы являются одной из основных причин перемещения ваших данных в географически осведомленную базу данных. Они оптимизированы для получения наилучших результатов для конкретной задачи, но, как и любая другая база данных, если вы создадите плохие индексы, вы получите плохую производительность.

В общем, вы определенно должны увидеть какое-то увеличение скорости, потому что математика в сортировке и индексации лучше знает цель данных, а не просто линейна в работе, как обычный индекс.

Имейте также в виду, что чем выше производительность сервера SQL, тем лучше будут результаты.

И последнее, на что следует обратить внимание, - это управление данными, если вы используете базу данных с поддержкой ГИС.затем открывается возможность использовать пакет ГИС, такой как ArcMap или MapInfo, для управления, исправления иisualise ваши данные, что означает, что исправления очень легко сделать, указывая, щелкая и перетаскивая.

Мой совет будет создать рядом с вашей существующей таблицей, которая отформатирована для пространственных операций, а затем написатьНесколько сохраненных процедур и некоторые временные тесты, которые лучше всего подходят.Если у вас есть значительный рост только по базовым операциям, которые вы выполняете, то это только оправдание, если оно примерно одинаково, то ваше решение действительно зависит от того, какую новую функциональность вы действительно хотите достичь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...