2013-02-22 104 views
1

Im MS SQL Server新增功能。但已經有一個問題。
我有一個查詢:如何加速SQL查詢

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)
它可能從這個怪物查詢功能?而使用函數可以使這個查詢更快?

UPDATE

我要創建視圖來發布它利用Geoserver。但是我有一個幾何問題。我有一段線段的幾何圖形。

我想我會談論表結構。我有3個表:

軌道

Segment_ID(character), 
Track (geometry) 

SEGMENT_ID

Segment_ID(character), 
Road_ID(character) 

Road_ID(character), 
Road_Name(character) 

而且在查詢結果我eant得到Road.Name,Road.Road_ID和所有分段連接在這條道路的單個特徵中。

UPDATE

我看到一些有趣的事情。在表道我有76行。當我按執行查詢我得到75行,5分鐘後,我得到所有76行。所以在上一次迭代中存在問題。什麼可能是錯誤的?

UPDATE

執行計劃http://sd.reborn.ru/download.php?fid=f52cb6c6146fdb993c1375f8b1da4787

+2

好的。本網站不是「爲我工作」網站。具體來說,你已經採取了我在這裏爲你寫的查詢(http://stackoverflow.com/questions/14943346/how-to-connect-lines-in-single-feature-in-sql-server/14949585),把它作爲你自己的,並且現在要求人們調整它。你有什麼嘗試過自己?只有你有權訪問你的實際數據,所以在這裏投入的任何努力都將主要是投機性的。你看過查詢計劃嗎?這是什麼意思?告訴我們你試過了什麼,有沒有工作,我們可以幫助你。 – 2013-02-22 12:54:03

回答

0

它可能從這個怪物查詢使功能?

--> Yes 

而使用函數可以使這個查詢更快?

--> No 

對不起,這個簡短的答案。但是,如果沒有關於數據模型的業務規則或關於計劃的技術細節的背景信息,則不可能提供詳細的改進建議。

+0

但我能做些什麼來加速查詢>? – 2013-02-22 10:44:47

+0

對不起,問題不大。我嘗試在2分鐘內更新它。你能看看嗎? – 2013-02-22 10:47:49

+1

檢查'road_id'列的索引?如果不存在,嘗試創建一個非聚集(我想你已經在該表上有一個聚集索引)。嘗試上傳您的執行計劃,該計劃以圖形方式顯示執行查詢時SQL Server執行什麼操作?任何額外的信息將是偉大的。 – veljasije 2013-02-22 15:18:25