Mysql 基于Peano-hilbert曲线的索引?

Mysql 基于Peano-hilbert曲线的索引?,mysql,hilbert-curve,Mysql,Hilbert Curve,我在MySQL中存储了一个x,y,z三维点, 我想问一下区域、片或点邻居。 是否有方法使用Peano-Hilbert曲线索引点以加速查询? 还是有更有效的方法将3D数据存储在MySQL中 谢谢Arman。我个人从未走这么远,但我使用Z曲线来存储2D点。这样做效果很好,并且没有必要尝试实现希尔伯特曲线以获得更好的结果 这将允许您快速筛选出肯定不在附近的点。在绝对最坏的情况下,您仍然需要扫描表的25%以上才能找到某个区域内的点 方法是将x-y-z分割成二进制,然后使用曲线将它们缝合成一个值。我希望我

我在MySQL中存储了一个x,y,z三维点, 我想问一下区域、片或点邻居。 是否有方法使用Peano-Hilbert曲线索引点以加速查询? 还是有更有效的方法将3D数据存储在MySQL中


谢谢Arman。

我个人从未走这么远,但我使用Z曲线来存储2D点。这样做效果很好,并且没有必要尝试实现希尔伯特曲线以获得更好的结果

这将允许您快速筛选出肯定不在附近的点。在绝对最坏的情况下,您仍然需要扫描表的25%以上才能找到某个区域内的点

方法是将x-y-z分割成二进制,然后使用曲线将它们缝合成一个值。我希望我已经准备好一个SQL脚本,但是我只有一个用于2d z曲线的脚本,这是一个更容易实现的脚本

编辑

很抱歉,您可能已经知道所有这些,并且只是在寻找SQL示例,但我还有一些补充:

  • 我不确定25%的最坏情况扫描对于3D飞机也是正确的。它可能更高,但我现在没有脑力告诉你;)
  • 这种类型的曲线将帮助您找到需要搜索的范围。如果有2个坐标,可以将它们转换为希尔伯特曲线编号,以确定需要在表的哪个部分查找与查询完全匹配的项
  • 您可能可以扩展此概念以查找邻居,但为了使用曲线,您仍然“卡滞”在范围内查找
您可以使用该算法创建一个坐标,并将其扩展到3个坐标。基本上,您可以定义一个包含可能的3d点的世界立方体,然后随着您添加更多位,您可以缩小立方体。然后一致地定义它,以便左下角的值最小,并且可以执行范围检查,如:

XXXXa < the_hash < XXXXz
XXXXa
谢谢您的回答,我可以试试Z曲线(或者在3D中,有时称为莫顿排序)。我已经看到了PostgreSQL的一个插件:也许MySQL会有另一个插件……很抱歉混淆了,但是Z曲线(莫顿数)的最坏情况是50%,希尔伯特曲线的最坏情况是25%。我在博客上写了3篇关于Z曲线的小文章: