2015-11-10 70 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