我是 MS SQL-Server 的新手。但是已经有问题了。
我有一个查询:
with by_segment as (
SELECT
Road.Road_ID,
GEOMETRY::STGeomFromText(Track.Track.STAsText(),4326) as the_geom,
row_number() over (partition by road_id order by Segment_Id) as [rn],
count(*) over (partition by road_id) as [c]
FROM dbo.Road
LEFT JOIN Segment_ID ON Road.Road_ID = Segment_ID.Road_ID
LEFT JOIN Track ON Segment_ID.Segment_ID = Track.Segment_ID
),
roads_by_segment as (
select
road_id,
the_geom,
[rn],
[c]
from by_segment
where [rn] = 1
union all
select
[a].road_id,
[a].the_geom.STUnion([b].the_geom),
[b].[rn],
[b].[c]
from by_segment as [a]
inner join roads_by_segment as [b]
on [a].segment_id = b.[segment_id]
and [a].[rn] = [b].[rn]+1
)
select * from roads_by_segment where [rn] = [c]
它的作品,但它需要很多时间。我的意思是当我按下执行查询时,我会在 2 秒内得到结果,但查询仍然工作大约 5 分钟。
我认为这是因为这里的选择太多。有选择功能的需要geometry1.STUnion(geometry2)
。
它可以从这个怪物查询中发挥作用吗?并且使用函数可以使这个查询更快?
更新
我想创建视图以在 Geoserver 上发布它。但我对几何有疑问。我有线段的几何形状。
我想我会谈谈表结构。我有 3 张桌子:
追踪
Segment_ID(character),
Track (geometry)
Segment_ID
Segment_ID(character),
Road_ID(character)
路
Road_ID(character),
Road_Name(character)
在查询结果中,我想获得 Road.Name、Road.Road_ID 和所有连接在该道路的单个要素中的路段。
更新
我看到了一些有趣的东西。在 table Road 我有 76 行。当我按下执行查询时,我得到 75 行,5 分钟后我得到所有 76 行。所以最后一次迭代的问题。有什么问题?
更新
执行计划http://sd.reborn.ru/download.php?fid=f52cb6c6146fdb993c1375f8b1da4787