在一系列点中搜索最小距离

时间:2014-04-02 16:49:42

标签: sql search optimization indexing distance

主要对象是,给定一系列点,在巨大的数据库中找到最接近的点。 假设我们有系列s1 =((X1,Y1),(X2,Y2),(X3,Y3),(X4,Y4))=(P1,P2,P3,P4),表系列或点(IndexId,P1, P2,P3,P4)和给定的数字Eta(最大距离)。我应该创建什么索引来优化此查询:

SELECT indexId FROM seriesOfPoints
dist(P1,p1)+ dist(P2,p2)+ dist(P3,p3)+ dist(P4,p4)< Eta

dist(P,p)= sqrt((x-X)^ 2 +(y-Y)^ 2)。
期望的索引将基于R树,但是,就我搜索而言,SQL Server中没有这样的索引。我怎样才能改进这个查询?

1 个答案:

答案 0 :(得分:0)

我认为没有数据库索引可以帮助提高该查询的性能。由于您的选择(WHERE子句)基于功能,因此必须测试所有行以验证条件是否为真。

您可以使用整个公式在表格上添加计算列(请参阅this) (dist(P1,p1) + dist(P2, p2) + dist(P3, p3) + dist(P4, p4))。然后,您可以在此新列上创建索引。

之后,您的WHERE子句将只是一个没有函数的简单less than条件。 也许这可以改善您的查询。