2012-04-15 6 views
-1

クエリに特別なものはないので、ここではクエリを追加しません。
クエリでは、10個のテーブルに結合を残しました。このクエリの
列のインデックスを作成してクエリの実行を増やす方法

...left join tableB b on a.UserId = b.UserId 
left join tableC c on a.UserId = c.UserId 
left join tableD d on a.UserId = d.UserId 

実行が23秒です。それはすでに大変です。
すべてのテーブルはUserId外部キー(uniqueidentifier)で接続されています。
インデックスを追加する必要があるかもしれないと思っていましたが、初めてこれを行いました。
管理スタジオで私はtable design > manage keys indexes > add index > in dropdown I select UserId (ASC)
私はすべての10のテーブルでこれを行うと私はクエリのクエリの実行後45秒でした行く。そしてこれは以前よりも悪いです。
インデックスを追加する際に何か問題がありますか?

+1

変更の前後に実行計画を投稿してください。 – GSerg

+0

質問に質問を追加しました。私は実行計画では決してしません。私はあなたに何を見せるべきですか?私はそれを実行するが、私は非常に大きなテキストを持っています。 – 1110

答えて

0

ユーザIDにインデックスを追加しても、ユーザID以外のカラムを選択している場合は役に立ちません。パフォーマンスを最大限に高めるには、ユーザーIDで順序付けされ、クエリに必要な他のすべての列も含む、各表にクラスタ化されていない索引を作成できます。

これは最高のパフォーマンスを提供しますが、これらのインデックスをすべて維持するために多くのオーバーヘッドが発生するため、考慮する必要があります。

0

問題によってグループ化されました。私はちょっと別のグループを編成し、実行時間はミリ秒単位です:)ここで私は何をしました。私はセクションで選択し、グループ全体からcount()を削除してからに私が書く:私はこのリンクhttp://weblogs.sqlteam.com/jeffs/archive/2005/12/14/8546.aspx

0

アイデアから技術を使用している

select S3.TotalCheckIns 
... 
left join (select userid, count(CheckInId) as TotalCheckIns 
    FROM dbo.checkins 
    GROUP BY UserId) S3 on p.UserId = S2.UserId 
    where p.UserId = @m_UserId 

(これが作成され、各FKとPKのインデックスを作成することです自動的に)それを行うと、あなたの結合が加速されます

関連する問題