1

MSSQL-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、およびこのRoadの単一のフィーチャに接続されているすべてのセグメントを取得する必要があります。

アップデート

何か面白いものがあります。テーブル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 に答える