WINDOWS 2008 上の SQL サーバー 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 のようなフィルターが必要な場合に高速化することはできますか?