2009-07-11 7 views
3

私はSQL Server 2005を使用しています。私は、Webアプリケーションが訪問したユーザーアクティビティとURLを追跡するために使用する単純なログテーブルを持っています。 テーブルの設計は非常に単純であるログテーブル用のクラスタ化インデックスの選択に関するアドバイスが必要

ID(識別値)、

アクティビティ(NVARCHAR(200))

LOGDATE(日時)、

のURL(データ型はnvarchar(1000))

主にこの表に挿入を行います。 ある期間、特定のユーザーのアクティビティを調査する場合は、このテーブルに対してクエリを実行します。 テーブルには現在、主キーとしてID列があります。これはクラスタ化インデックスでもあります。

クラスタ化されたインデックスをLogDate列に変更する方が良いのではないかと思います。 LogDate列にはアクティビティの日時が格納され、重複する可能性がありますが、常にテーブルに挿入するため、新しいレコードは常にテーブルの最後にある必要があります。インサートのパフォーマンスに影響するページ分割を再編成するか、再編成します。 LogDate列をクラスタード・インデックスとして使用すると、検索のパフォーマンスにも役立ちます。

私の推論が正しいかどうか教えてください。ありがとうございました!

答えて

3

はい、あなたの推論が正しいか、挿入の速度はdatetime3.33ms

SQL Server 2008のの粒度よりはるかに小さい提供より高い精度(100ナノ秒)を持つ新しいデータ型DATETIME2を持っています。

空き領域(FILLFACTOR:80-90)を残して、定期的にインデックスを再構築する場合(週に1回)、すべてが正常である必要があります。

0

"データベースエンジンチューニングウィザード"を使用することをお勧めします。 これは、あなたのケースに最適な選択肢を選ぶことに注意します。 あなたの実際の事例に最もよく一致する分析を行うために、あなたの異なるケースをカバーするのに十分長く実行するだけです。

あなたは(SQL Server 2005の)http://msdn.microsoft.com/en-us/library/ms189303%28SQL.90%29.aspxで詳細を見つけることができます

+0

DTAは妥当な仕事をしていますが、間違ったインデックスを示唆することがあります。 –

3

クラスタリングインデックスを選択する前に、優先度を設定する必要があります。もっと重要なのは、頻度の低い選択をスピードアップすること、または頻繁に挿入を遅くすることです。挿入がより重要な場合は、既存のクラスタリング索引を保持します。

+0

あなたの助言に感謝します。これは私も考慮すべきものです。 IDをクラスタードインデックスとして保持すると、クラスタードインデックスをLogDateに設定するよりも若干優れた挿入パフォーマンスが得られるでしょうか? – janem

+0

@ジャネモレノ。はい、重複したLogDateを持つ行を挿入すると一意識別子(LogDateにクラスタ化されている場合)が必要になるため、やや遅くなります。 –

関連する問題