对连接进行分区以限制SQL

时间:2017-12-05 14:03:37

标签: sql sql-server spatial

我有2张桌子: - 第一个包含空间数据 - 圆的几何 - 第二个包含线的几何。

我想找到每个圆圈内的所有线条。我有一个查询可以做到这一点,但有数百万条记录,所以它非常慢。 两个表中都有一个列是area_id,基本上所有圆都分配给特定区域和所有行,所以如果我可以只用匹配区域中的线与圆相交,这将减少加载很多。问题是我无法想到解决方案,例如使用窗口函数。我正在使用的查询是:

Select ct.AREA_ID, ct.Circle_descr,  lt.Line_descr from circles_table as ct
JOIN lines_table as lt
ON 
circles_table.Circle_location.STIntersects(points_table.Point_location)=1

*在最后使用where子句没有区别,因为它基本上是慢速连接的一部分......

+---------------+----------------------+--------------------------+
| AREA_ID (int) | Circle_descr(varchar) | Circle_location(geometry)|
+---------------+----------------------+--------------------------+


+---------------+---------------------+-------------------------+
| AREA_ID (int) | Line_descr(varchar) | Line_location(geometry) |
+---------------+---------------------+-------------------------+

1 个答案:

答案 0 :(得分:0)

添加其他连接标准,以便在比较之前按area_id对行进行分区。像

这样的东西
Select ct.AREA_ID, ct.Circle_descr,  lt.Line_descr 
from circles_table as ct
JOIN lines_table as lt
  ON ct.Circle_location.STIntersects(lt.Point_location)=1
 AND ct.area_id = lt.area_id