実行プランでの注目点

ここのおがわさんの発言
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=580202&SiteID=7

クエリーアナライザで、実行プランの表示をしてみてください。
TableScan + HashMatch が発生していたら明らかに INDEX が足りません。
少なくとも IndexScan + Stream Aggregate (ストリーム集計)まで持っていかないとパフォーマンスは出ません。
まず TableScan になるのはクラスタ化インデックスのみかヒープ(クラスタ化インデックス、非クラスタ化インデックスも無いテーブル)の場合です。
次のレベルにするにはカバリングインデックス(非クラスタ化インデックス)を設定することです。
カバリングインデックスにするには WHERE の条件、 JOIN の子側の項目、GROUP BY の項目です。
条件が合えば、これで IndexScan + Stream Aggregate になるでしょう。
ここまでが SQL Server 2000 までの機能での話で、SQL Server 2005 になったら、非クラスタ化インデックス + INCLUDE を設定します。
キーはカバリングインデックスと同じですが、INCLUDE は SELECT する項目を指定します。
これによりかなり高速になります。
もっと高速にしたいのであれば、インデックス付き VIEW を設定することです。
まぁ、このあたりは http://blogs.sqlpassj.org/ に皆さん書いているのでみてください。
あと、SQL Server 2005 であれば、データベース エンジン パフォーマンス アドバイザを使うとすごく幸せになれると思いますが。