WINDOWS 2008 上的 SQL Server 2008
请比较以下sql:
1.
select count(*)
from Trades t
inner join UserAccount ua on ua.AccID = t.AccID
2.
select count(*)
from Trades t
inner join (
select *
from UserAccount ua
where ua.UserID = 1126
) as theua on theua.AccID = t.AccID
3.
select count(*)
from Trades t
inner join UserAccount ua on ua.AccID = t.AccID
where ua.UserID=1126
鉴于 Trades 有数百万行,而 UserAccount 是一个非常小的表。AccID 可以是重复的。
执行结果:
- 234734792
- 8806144
- 8806144
我预计 No.2 至少可以和 No.1 一样快,但实际上它比 No.3 慢得多,甚至慢得多 时间消耗:
- 2 秒
- 10 秒
- 8 秒
有人可以解释原因吗?当我需要像 UserID=1126 这样的过滤器时,是否可以让它更快?