2013-02-21 4 views
1

У меня есть большое количество фотографий (~ 10 миллионов) в базе данных SQL Server с столбцом геоколей, который может быть NULL или NOT NULL (не размещен или помещен на карту).Использование NULL с пространственными индексами

Также я создал пространственный указатель этой геоинформации.

Теперь я пытаюсь выбрать все фотографии внутри определенного полигона.

Есть два способа хранения фотографий, которые не находятся на карте:

  • Если я назначу NULL гео расположения всех фотографий, которые не находятся на карте, производительность такого запроса слишком медленного (как I undestood, пространственный индекс вообще не работает со столбцами NULL).

  • Если я назначаю POINT(0 0) геопозиции всех фотографий, отсутствующих на карте, производительность хорошая, за исключением случая с этой нулевой точкой POINT(0 0). Также такой запрос возвращает неверные фотографии (их нет на карте).

Как я могу преодолеть эти проблемы?

Должен ли я добавить столбец, который будет содержать бит для NULL или NOT NULL и создать индекс из двух столбцов (этот столбец и геоинформация)?

UPDATE Я попытался создать индекс из двух столбцов, но это невозможно, так как пространственный индекс содержит только один столбец с гео информацией (MSDN).

ответ

0

Как я понимаю, есть два решения моей проблемы:

  • Перемещение нулевой точки POINT(0 0) на дальнюю северную точку POINT(0 90). Это решение не идеально, но работает и не требует изменения версии SQL Server.
  • Изменение версии сервера SQL до 110 (в этой версии глюк с NULL фиксировано), выполнив этого сценария: ALTER DATABASE имя_базы_данных SET COMPATIBILITY_LEVEL = 110
1

Какую версию SQL-сервера вы используете? Существует проблема с ноу обнуляемыми пространственными столбцами в 2008 и 2008 R2 Пожалуйста, посмотрите на мой вопрос по этой же теме: SQL Server 2008 Performance on nullable geography column with spatial index

Я решил эту проблему, имея отдельную таблицу для хранения пространственного типа данных. В моем проекте я hava адресная таблица с столбцом Id, столбцом широты и долготы Тогда у меня есть таблица AddressCoordinate, которая имеет ограничение внешнего ключа на идентификаторе адреса и столбец географии. Наконец-то у меня есть сценарий, чтобы заполнить отсутствующие действительные AddressCoordinates на основе.

+0

Отдельные таблицы не является хорошим решением из-за избыточности. –

+1

Я согласен с тем, что это не идеальное решение, но оно имеет свои преимущества: 1: не вставлены фиктивные данные, которые необходимо отфильтровать позже. 2: Размер и производительность: фиктивные данные также значительно увеличивают размер индекса и, таким образом, могут влиять на время выполнения. 3: У меня был только пространственный тип данных, хранящийся в этой таблице, поэтому единственное дублирование было PK. Этот компромисс сделал это стоящим мое время, но я понимаю, что вы пришли к другому выводу для своего дела. – Tomas