我有一个存储在
MySQL中的x,y,z三维点,
我想问区域,切片或点邻居.
有没有办法使用Peano-Hilbert曲线对点进行索引以加速查询?
或者是否有更有效的方法将3D数据存储在MySQL中?
谢谢阿曼.
最佳答案 我个人从来没有走过这么远,但我使用Z曲线来存储2D点.这非常有效,并且不需要尝试实现希尔伯特曲线以获得更好的结果.
这应该允许您快速过滤掉当前不靠近的点.在绝对最糟糕的情况下,您仍然需要扫描超过25%的表来查找区域内的点.
解决这个问题的方法是将x y z分成二进制,然后使用曲线将它们拼接成单个值.我希望我准备好一个SQL脚本,但我只有一个用于2d z曲线,这更容易做到.
编辑:
对不起,您可能已经知道所有这些,并且真的只是在寻找SQL示例,但我还有一些补充:
>我不确定25%的最坏情况扫描是否也适用于3D平面.它可能更高,现在没有脑力告诉你;).
>此类型的曲线将帮助您查找需要搜索的范围.如果您有2个坐标,则可以将这些坐标转换为希尔伯特曲线编号,以找出您需要查找与您的查询完全匹配的项目的表格的哪个部分.
>您可以扩展此概念以查找邻居,但为了使用该曲线,您仍然“卡住”以查看范围.