SQL Оптимизация пространственного индекса для локализованных географических точек

У меня есть ~400 тыс. Точек интереса, которые хранятся в ГЕОГРАФИИ пространственной sql.

Я буду запрашивать эти точки с помощью PointOfInterest.STDistance(@CentralPoint) <@Radius, чтобы найти точки PointOfInterest в пределах определенного радиуса @CentralPoint, отправленного на запрос.

Я прочитал немного о наложении сетки и хотел бы, чтобы кто-то, кто знает их материал, порекомендовал наиболее разумный шаблон сетки. По умолчанию

LEVEL_1 = MEDIUM, LEVEL_2 = MEDIUM, LEVEL_3 = MEDIUM, LEVEL_4 = MEDIUM

Но моя ситуация такова, что у меня будут ТОЛЬКО интересные места в Великобритании. Несмотря на то, что мы удивительны, мы принимаем только относительную спецификацию terra firma, поэтому мне было интересно, есть ли лучший шаблон сетки для использования в пространственном индексе для этого случая.

Будучи основанным на географии, я не могу использовать симпатичные ограничивающие рамки геометрии. Кроме того, я использую SQL Azure, который, кажется, не хранит пространственную помощь procs:(

1 ответ

Решение

Как и в случае с пространственной индексацией, вы обнаружите, что тестирование различных параметров сетки в вашем наборе данных может дать результаты, отличные от результатов других. Тем не менее, я считаю, что установка Low на всех уровнях или Medium, Low, Low, Low дает отличные результаты с точками из-за их упрощенного характера.

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

DECLARE @point GEOGRAPHY = GEOGRAPHY::STPointFromText('POINT(<coords>)', 4326);
DECLARE @radius INT = 1000;

SELECT
*
FROM <table>
WHERE <GeographyColumn>.STIntersects(@point.STBuffer(@radius)) = 1;

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

Другие вопросы по тегам