Пространственные индексы
Учитывая пространственный индекс, это утилита индекса, то есть общая производительность индекса, только такая же хорошая, как и общая геометрия.
Например, если бы я взял миллион типов данных геометрии и вставил их в таблицу так, чтобы их относительные точки были плотно расположены друг к другу, делает ли этот индекс лучше для идентичных геометрических фигур, относительное расположение которых могло бы быть значительно более разреженный.
Вопрос 1
Например, возьмите эти две геометрические фигуры.
Ситуация 1
LINESTRING(0 0,1 1,2 2)
LINESTRING(1 1,2 2,3 3)
Геометрически они идентичны, но их координаты смещены на одну точку. Представьте, что это повторилось миллион раз.
Теперь возьми эту ситуацию,
Ситуация 2
LINESTRING(0 0,1 1,2 2)
LINESTRING(1000000 1000000,1000001 10000001,1000002 1000002)
LINESTRING(2000000 2000000,2000001 20000001,2000002 2000002)
LINESTRING(3000000 3000000,3000001 30000001,3000002 3000002)
В приведенном выше примере:
- размеры линий идентичны ситуации 1,
- линии имеют одинаковое количество точек
- строки имеют одинаковые размеры.
Однако,
- разница в том, что линии значительно дальше друг от друга.
Почему это важно для меня?
Причина, по которой я задаю этот вопрос, заключается в том, что я хочу знать, следует ли мне удалять из своих входных геометрий столько точности, сколько возможно, и уменьшать их плотность и близость друг к другу настолько, насколько может обеспечить мое приложение, не теряя точности.
Вопрос 2
Этот вопрос похож на первый вопрос, но вместо того, чтобы пространственно приблизиться к другой геометрической фигуре, следует уменьшить сами фигуры до наименьшей возможной формы, чтобы описать, что именно требуется для приложения.
Например, если бы я использовал индекс SPATIAL для геометрического типа данных, чтобы предоставить данные о датах.
Если бы я хотел сохранить диапазон дат из двух дат, я мог бы использовать тип данных datetime в mysql. Однако, что если я захочу использовать тип геометрии, чтобы я преобразовал диапазон дат, взяв каждую отдельную дату и преобразовав ее в unix_timestamp ().
Например:
Date("1st January 2011") to Timestamp = 1293861600
Date("31st January 2011") to Timestamp = 1296453600
Теперь я могу создать LINESTRING на основе этих двух целых чисел.
LINESTRING(1293861600 0,1296453600 1)
Если мое приложение на самом деле касается только дней, а количество секунд вообще не важно для диапазонов дат, я должен реорганизовать свои геометрии, чтобы они уменьшились до минимально возможного размера, чтобы выполнить то, что им нужно ,
Так что вместо «1293861600» я бы использовал «1293861600» / (3600 * 24), что, как оказалось, «14975.25».
Может ли кто-нибудь помочь заполнить эти пробелы?