Я пытаюсь сгруппировать по пространственной локальности (Не просто создать пространственный индекс), но SQL Server этого не допускает. Чтобы создать пространственный индекс, он сначала хочет, чтобы я создал кластерный первичный ключ, который не имеет смысла для кластера. Я хочу создать пространственный индекс, а затем каким-то образом сгруппировать по пространству.Кластер по пространственному индексу
У меня есть идея создать мусорные корзины, в которых каждая геометрия будет помещена в определенную ячейку, которая затем получает целое число. Затем установите это как необходимый кластерный первичный ключ, таким образом, по крайней мере некоторые из моих данных группируются вместе пространственно.
Я как бы сбитый с толку SQL-сервер этого не делает, так что либо я упускаю из виду, как это сделать, либо, скорее всего, кто-то подумал об этом, и кто-то может предложить достаточно хорошее решение.
Я хочу сгруппировать по пространственному местоположению, потому что я имею дело с большими данными, и первый фильтр, который я делаю, - это пространственное расположение (создание плиток карт), без кластеризации в пространственном местоположении мои страницы теперь разбросаны на основе какого-то бессмысленного авто increment integer.
Если не была предложена простой реализации биннинга по пространственному положению, я полагал, что я мог бы просто вырезать границы моей геометрии на равные квадраты, а затем для каждой центральной точки запустить формулу расстояния, которая включает в себя все, что геометрии пересечь этот бит.
Это не относится к SQL-серверу для каждого пользователя, я ищу общие подходы к решению этого индекса/кластеризации в пространственном местоположении. Я предполагаю, что базы данных не-mssql могут поставляться с этой встроенной функциональностью.
Да, теперь я кластер на произвольный ключ и добавил свой пространственный указатель. Пространственный индекс игнорируется SQL-сервером, потому что он предпочел бы сначала использовать другой кластер PK из таблицы JOINed, а затем просто выполнить проверку PK на моей гео-таблице (он делает это, потому что прямо сейчас, если он использовал мою пространственную индекс, тогда данные будут разбросаны). Если бы я мог найти способ сгруппировать в какой-то значимый пространственный способ, я думаю, что SQL-сервер будет использовать мой пространственный индекс, потому что листовые узлы не будут на таких некластеризованных страницах. – ParoX
Использование пространственного индекса оптимизатором невелика. Вы пытались использовать подсказку запроса, чтобы влиять на оптимизатор, чтобы использовать его? –
В этом случае он совершает интеллектуальное перемещение, потому что таблица геометрии кластеризуется случайным образом (потому что я кластеризую ключ автоматического увеличения). Есть 100 миллионов геометрий, и он находит 2000 результатов. Эти 2000 результатов, вероятно, принадлежат к примерно 2000 отдельным страницам, потому что это кластер. Мое предположение заключается в том, что SQL-сервер реализован, в то время как пространственный индекс будет лучше выполнять фильтрацию, его слишком нечеткие и предпочитает использовать фильтр, который не так хорош, но более сгруппирован. – ParoX