主要对象是,给定一系列点,在巨大的数据库中找到最接近的点。 假设我们有系列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中没有这样的索引。我怎样才能改进这个查询?
答案 0 :(得分:0)
我认为没有数据库索引可以帮助提高该查询的性能。由于您的选择(WHERE
子句)基于功能,因此必须测试所有行以验证条件是否为真。
您可以使用整个公式在表格上添加计算列(请参阅this)
(dist(P1,p1) + dist(P2, p2) + dist(P3, p3) + dist(P4, p4)
)。然后,您可以在此新列上创建索引。
之后,您的WHERE
子句将只是一个没有函数的简单less than
条件。
也许这可以改善您的查询。