我有一个包含许多circles
的数据库(每个都有x、y和半径)。我需要找到每个圆,其中包括一个由x/y给出的特定点。
有办法在better than linear time
中做到这一点吗?测试每一个圆圈都会大大降低我的应用程序的速度。
提前谢谢。
在没有几何索引的情况下,在一些RDBMS中,您可以为以下对象创建基于函数的索引:
x-r
x+r
y-r
y+r
并在查询中添加谓词:
select ...
where point_x between x-r and x+r and
point_y between y-r and y+r and
... etc ...
这至少会让你成为候选人。
除非你已经设法按照非常特定的顺序对圆圈进行排序,否则我看不出这怎么能比线性时间更快。
不过,如果您向我们提供您的查询,可能还有一些很好的优化工作要做。