1

我是 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

4

1 回答 1

0

它可以从这个怪物查询中发挥作用吗?

--> Yes

并且使用函数可以使这个查询更快?

--> No

很抱歉这个简短的回答。但是如果没有任何关于你的数据模型的业务规则的背景信息或关于计划的技术细节,就不可能给出详细的改进建议。

于 2013-02-22T10:43:18.210 回答