两个语句会返回相同的结果吗?
顶部代码在 WHERE 子句中包含 JOIN,需要 4 个多小时才能运行。通过将 JOIN 移到 WHERE 之外,相同的查询在 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')
是的,我相信这两个查询都会给出相同的结果。 在连接给出最慢结果的一侧。但是上面查询还有一个替代方法,它将比第二个查询更快
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