2012-03-09 2 views
1

SQL Serverで単純なテーブルを構成しています。これは "LOG"という名前で、予期されるように、さまざまなアプリケーションの使用をさまざまな方法で監視/検索/グループ化するために、ログを記録するために使用されます。別のインデックスの各列SQL Server:3列の場合、「1つのインデックス/列ごと」の違い

LOG { 
    user varchar(8), 
    timestamp datetime, 
    appname varchar(16) 
} 
primary key(user,timestamp,appname) 

万一Iインデックス:

テーブルはややその(単純な構文)のように宣言されていますか?同じインデックスの3つすべて? クラスタ化/非クラスタ化?

ここではどのような論理/知識が必要なのかよく分かります。

+1

あなたはそのテーブルにどのような使用をしますか?あなたはユーザーのレコードを取得するためにほとんどのクエリを照会していますか?日付?日付のユーザーですか?アプリですか....あなたはどこに行くのかわかります – Lamak

+0

期間、または時間間隔の組み合わせごとにすべてのグループ – Jerome

答えて

2

timestampクラスタ化インデックス... since a clustered index is particularly efficient on columns that are often searched for ranges of valuesを作成することをお勧めします。これはデータのクエリ方法を説明しているようです。

さらに、私はtimestampがシーケンシャルであると仮定しています。これは、挿入されているデータのランダムな分布がある場合よりも安価なクラスタード・インデックスに新しいデータを挿入することになります。

あなたがuserまたはappnameで検索されるようにそれが聞こえないので、あなたがどこかに道をこれらの値に参加したり、where句でそれらを使用する予定がない限り、私はこれらの列にインデックスを追加することをお勧めしません。

あなたのインデックスにすべての3つのフィールドを追加することを示唆していますが、この操作を行うと、「リーディングエッジ」が検索に含まれている場合、インデックスは、あなたのインデックス場合、例えば

...使用されます(user, timestamp, appname)ですが、timestampappnameで検索している場合、そのインデックスは使用されません。このため、索引の作成時にデータの問合せ方法を検討することが非常に重要です。

関連する問題