2012-01-05 11 views
0

私はインデックスを調査しており、多くの記事を読んでおり、専門家のアドバイスが必要です。警告として、インデックスフィールドは私にはかなり新しく、少し読んでも紛らわしいです!SQL Server 2005 - updt_tmstmpフィールドのインデックス

簡略化するために、guid(トランザクションID)、イベントID、およびupdt_tmstmp(この質問には重要ではありませんが他の多くのフィールドがあります)テーブルを持っています。

私のPKはtransaction_idとevent_idであり、テーブルはこれらのキーによって順序付けられています。 transaction_idはguidであるため、updt_tmstmpフィールドは非常にランダム化されています。テーブルが600万レコードに増加したため、クエリが遅くなりました。私の考えは、updt_tmstmpフィールドにインデックスを追加することでした。私たちの抜粋はテーブル上で頻繁に検索し、過去24時間に更新されたtransaction_idを探します。クエリは、更新されたレコードを見つけるためにテーブル全体をスキャンしています。平均時間は1分

詳細電流: テーブルサイズ6.2万レコード インデックス:しようとしましたTRANSACTION_ID +のevent_id(クラスタ化)

詳細: 追加インデックス:updt_tmstmp(非ユニークな、非クラスタ)

この更新プログラムを実行してクエリを実行すると、約10%改善され、Explainプランはインデックスをスキャンしていることを示しています。私はこれより少し良いパフォーマンスを期待していました。私のupdt_tmstmpは一意であることが保証されていません(私はこれを行うためにアプリケーションプログラマーを責めます:))。

これにアクセスするために使用しているクエリは、標準のstart_time - end_timeです。 updt_tmstmp> = @start_timeとupdt_tmstmp < @end_time

おかげさまでありがとうございました!

クリス

答えて

0

質問:TRANSACTION_IDとupdt_tmstmp上のevent_IDにクラスタ化インデックス、およびnon_clusteredインデックスを考えると、私は以下をお勧めします:

- のevent_idにクラスタ化インデックスと非クラスタ化インデックスを削除on updt_tmstmp。
- updt_tmstmpにクラスタード・インデックスを作成します。

ロジック:SQL Serverクエリオプティマイザは、クラスタ化されていないインデックスより常にクラスタ化インデックスを優先しています。ほとんどのクエリのshowplanは、event_idをクラスタード・インデックスとして使用するときにクラスタード・インデックスSCANを表示します。クラスタ化インデックスをupdt-tmstmpに移動すると、showplanクエリは過去24時間のすべてのトランザクションの範囲検索を表示し、クラスタキーがソートされ、ディスク上に物理的に隣接しているため、すばやく実行する必要があります。クラスタのスキャン。

これを行うことで、いくつかの重要な設計目標を達成することができます。また... UPDT-tmpstmpフィールドデータを順次アクセスされる - 非常に選択的である1またはを持つ列が

多くの異なる値が含まれて考えると、できるだけ少ない列を持つクラスタ化インデックスキーを定義

まれに更新された場合はほとんどありません。クラスタード・インデックスに最適です。 updt-tmstmpフィールドは、テーブルから取得したデータをソートするために頻繁に使用されます。

クエリを最適化するために、次のクエリを使用することをお勧めします。統計が にioを

セットが に 、設定された統計時間を行くテーブルの

表 名を行きます。

スキャン・カウント 実行された索引または表スキャンの数。

論理読み取り データキャッシュから読み取られたページ数。

物理読み取り ディスクから読み取られたページ数。

先読みの読み取り クエリのキャッシュに配置されたページの数。

lob論理読み取り データキャッシュから読み取られたtext、ntext、image、または大きな値タイプ(varchar(max)、nvarchar(max)、varbinary(max))ページの数。

lob物理的な読み取り ディスクから読み取られるtext、ntext、imageまたは大きな値のタイプのページの数。

lob先読み読み取り クエリのキャッシュに配置されたtext、ntext、imageまたは大きな値のタイプのページの数。

SQL Serverの解析と経過時間とCPUをコンパイル

SQL Serverの実行時間とCPU