Пространственное индексирование MS SQL Server 2008 – работает ли оно?
-
21-08-2019 - |
Вопрос
Кто-нибудь пробовал его использовать и может сказать, хорошо ли он реализован?
-- Ассаф (который последние несколько недель все больше разочаровывался из-за недостаточной реализации функций OpenGIS в MySQL и теперь подумывает о переходе на MSSQL)
Решение
Да, они работают.
Я только что переключил один из своих классов с запроса на основе ESRI-ArcObject с использованием ISpatialFilter на SqlCommand, который возвращает те же данные.Это поиск по близости (возвращает все записи, находящиеся в пределах 1000 футов от точки x).
Поначалу запрос ESRI все еще выполнялся быстрее, но это было связано с плохо построенным предложениемwhere, которое было очень неэффективным (я все еще учусь использовать пространственные функции в SQLSVR2008).
После некоторой настройки мой метод SQL оказался быстрее, чем метод ESRI, но ненамного.Затем я увеличил расстояние поиска до 10 000 футов и увидел разницу.Метод SQL Server 2008 был намного быстрее.
(ESRI) Затраченное время поиска ближайших клиентов (сек):1,503 (SQL2008) Запрос близлежащих клиентов в прошлом (SEC):0,925
Хотя разница в скорости связана не с индексами, а с ESRI-ArcObjects.В моем методе ESRI я получаю расстояние, x и y от IProximityOperator и IPoint.В методе SQL2008 я позволяю базе данных выполнять всю работу:SHAPE.STX как X, SHAPE.STY как Y, SHAPE.STDistance (но разработчики ArcObject знают все об этих накладных расходах).
Я пока впечатлен.
Другие советы
Да, это работает, у меня есть пример кода здесь Поиск близости SQL Server 2008 с типом данных «География»
Да.Они реализованы правильно.У вас также есть PostgreSQL PostGIS В качестве опции, Oracle Пространственный.Informix и DB2 также имеют реализации пространственного типа.