У меня есть большое количество фотографий (~ 10 миллионов) в базе данных SQL Server с столбцом геоколей, который может быть NULL или NOT NULL (не размещен или помещен на карту).Использование NULL с пространственными индексами
Также я создал пространственный указатель этой геоинформации.
Теперь я пытаюсь выбрать все фотографии внутри определенного полигона.
Есть два способа хранения фотографий, которые не находятся на карте:
Если я назначу NULL гео расположения всех фотографий, которые не находятся на карте, производительность такого запроса слишком медленного (как I undestood, пространственный индекс вообще не работает со столбцами NULL).
Если я назначаю
POINT(0 0)
геопозиции всех фотографий, отсутствующих на карте, производительность хорошая, за исключением случая с этой нулевой точкойPOINT(0 0)
. Также такой запрос возвращает неверные фотографии (их нет на карте).
Как я могу преодолеть эти проблемы?
Должен ли я добавить столбец, который будет содержать бит для NULL или NOT NULL и создать индекс из двух столбцов (этот столбец и геоинформация)?
UPDATE Я попытался создать индекс из двух столбцов, но это невозможно, так как пространственный индекс содержит только один столбец с гео информацией (MSDN).
Отдельные таблицы не является хорошим решением из-за избыточности. –
Я согласен с тем, что это не идеальное решение, но оно имеет свои преимущества: 1: не вставлены фиктивные данные, которые необходимо отфильтровать позже. 2: Размер и производительность: фиктивные данные также значительно увеличивают размер индекса и, таким образом, могут влиять на время выполнения. 3: У меня был только пространственный тип данных, хранящийся в этой таблице, поэтому единственное дублирование было PK. Этот компромисс сделал это стоящим мое время, но я понимаю, что вы пришли к другому выводу для своего дела. – Tomas