Лично я никогда не заходил так далеко, но я использовал Z-кривую для хранения 2D точек. Это работало довольно хорошо, и не было необходимости пытаться реализовать кривую Гильберта для лучших результатов.
Это должно позволить вам быстро отфильтровать точки, которые, конечно, не находятся рядом. В худшем случае вам все равно нужно отсканировать более 25% таблицы, чтобы найти точки внутри области.
Способ сделать это состоит в том, чтобы разделить x y z в двоичном виде и объединить их в одно значение с помощью кривой. Хотелось бы, чтобы у меня был готов сценарий SQL, но у меня есть только один для 2-й z-кривой, который намного проще сделать.
Редактировать
Извините, вы, возможно, уже знаете все это и действительно просто ищете примеры SQL, но у меня есть некоторые дополнения:
- Я не уверен, что сканирование в худшем случае на 25% верно и для трехмерных плоскостей. Это может быть выше, не хватит ума, чтобы сказать тебе;).
- Этот тип кривой поможет вам найти диапазоны, где вам нужно искать. Если у вас есть 2 координаты, вы можете преобразовать их в число кривой Гильберта, чтобы узнать, в каком разделе вашей таблицы вам нужно искать элементы, которые точно соответствуют вашему запросу.
- Возможно, вы сможете расширить эту концепцию, чтобы найти соседей, но для того, чтобы использовать кривую, вы все еще «застряли», чтобы посмотреть в диапазонах.