【发布时间】:2012-02-29 01:24:30
【问题描述】:
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
Given Trades 有数百万行,而 UserAccount 是一个很小的表。而且 AccID 可以重复。
执行结果:
- 234734792
- 8806144
- 8806144
我预计2号至少可以和1号一样快,但实际上它比3号慢得多甚至慢得多 耗时:
- 2 秒
- 10 秒
- 8 秒
有人可以解释原因吗?当我需要像 UserID=1126 这样的过滤器时,是否可以让它更快?
【问题讨论】:
标签: sql sql-server sql-server-2008 sqlperformance