-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秒でした。そして、これは以前よりも悪化しています。
インデックスの追加で何か間違っていますか?

4

3 に答える 3

0

それは問題ごとのグループでした。私は少し違うグループを編成し、実行時間はミリ秒単位になりました:)ここで私がしたことです。count()私は、セクションごとに選択およびグループ全体から削除し、次のように記述します。

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

私はこのリンクhttp://weblogs.sqlteam.com/jeffs/archive/2005/12/14/8546.aspxからのテクニックを使用しました

于 2012-04-15T15:50:44.290 に答える
0

ユーザー ID 以外の列を選択している場合、ユーザー ID にインデックスを追加しても役に立ちません。最大のパフォーマンスを得るには、ユーザー ID で並べ替えられ、クエリに必要な他のすべての列を含む各テーブルに非クラスター化インデックスを作成できます。

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

于 2012-04-15T14:51:46.987 に答える
0

アイデアは、各 FK および PK のインデックスを作成することです (これは自動的に作成されます)。そうすることで、結合が高速化されます。

于 2012-04-17T17:08:33.823 に答える