2015-11-10 72 views
1

這個沒有TOP 1的查詢在第一個工作中與頂部1工作,需要8秒。任何想法如何我可以改善這一點?SQL Server按順序排列並選擇top 1非常慢

SELECT top 1 bw.id as workflow_id,bw.status_id workflow_status_id, bo. record_id,bo.addr_line_1, bw.created_by 
from dbo.input_Oct bo left outer join dbo.onebyone_workflow bw on bw.record_id = bo.record_id and (job_id = 18) 
where (bw.id IS NULL) 
order by bo.match_result asc ,bo.unique_address desc, bo.record_id asc 
+0

想要'TOP 1'嗎? – Marusyk

+0

好吧,這將返回幾千,我只需要頂部1是啊 – StevieB

回答

1

請儘量使用ROW_NUMBER()

;WITH Resultaat AS (select bw.id, .... 
        , ROW_NUMBER() OVER (order by 
         bw.id ASC 
        ) AS RM 
        from .... 
) select * from Resultaat where RN = 1 
0

外連接是昂貴的。我會嘗試從左外部連接移動AND並將其放在其中。我不確定它在哪個表中,因此您可能需要稍微改變它。

SELECT top 1 bw.id as workflow_id, bw.status_id workflow_status_id, 
      bo. record_id,bo.addr_line_1, bw.created_by 
FROM dbo.input_Oct bo 
LEFT OUTER JOIN dbo.onebyone_workflow bw on bw.record_id = bo.record_id and 
WHERE bw.id IS NULL AND job_id = 18 
ORDER BY bo.match_result asc, bo.unique_address desc, bo.record_id asc 
+1

問題是有一個原因,爲什麼說「和」是在該級別,因爲我可以在oneby_workflow表中有多個類似的「record_id」,並需要job_id選擇正確一個 – StevieB

+0

如果將它移動到where子句,這仍然可以工作。 您是否打開了SQL Server管理Studio中的執行計劃,您將看到延遲的位置。這是執行按鈕附近的圖標。 –

+0

試圖將它添加到where子句中,它使查詢立即運行,但結果是錯誤的。它需要在外部連接級別上。我執行的執行計劃的事情分三個指標33%。 – StevieB