在WHERE和WHERE之外加入

时间:2014-12-16 14:54:09

标签: sql sql-server

两个语句都会返回相同的结果吗?

顶部代码在WHERE子句中有JOIN,需要4个小时才能运行。通过在WHERE外部移动JOIN,相同的查询在1m 6s内运行。我没有在WHERE子句中看到JOIN。

注意 DSA.doc_id是orders.folder的子版本记录。

    --OLD CODE TAKING 4+ HRS TO RUN
    SELECT top 1 status_to_date
    FROM DSA
    WHERE (status_to = 'CA') 
    and left(DSA.doc_id,12) = orders.folder 


    --NEW CODE TAKING LESS THAN A MINUTE
    SELECT top 1 status_to_date
    FROM DSA
    left outer join orders 
        on left(DSA.doc_id,12) = orders.folder 
    WHERE (status_to = 'CA')

1 个答案:

答案 0 :(得分:2)

是的,我相信两个查询都会给出相同的结果。并且在连接给出最慢结果的一侧。但是还有一个上面的查询替代,它将比第二个查询更快,更快

Select 
     Top (1) status_to_date
 FROM 
    DSA
 WHERE 
    (status_to = 'CA')
    AND  (Select count(*) From orders where orders.folder =  left(DSA.doc_id,12)) > 0