两个语句都会返回相同的结果吗?
顶部代码在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')
答案 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