2011-07-30 5 views
1

主キーの整数IDを持つ典型的なテーブルと、行の作成時に記録するDateTime列があります。理論的には、Id列の順序は常にDateTime列の順序と同じでなければなりません。私のアプリケーションはORDER BY CreateDateTime DESCで、CreateDateTimeカラムのインデックスを追加しようとしていましたが、プライマリキーのクラスタードインデックスが同じものを達成するはずですが、意味的に正しいわけではありませんが、別のインデックスを作成します。とにかくCreateDateTimeインデックスを追加しますか?代わりにLastUpdatedDateTime列の場合(インデックスの更新が随時行われる)インデックス行IDと行DateTime

答えて

1

"理論的には..."実践が理論と一致しない場合はどうですか?

場合は、その日付フィールドでインデックスと注文を作成します。 いいえの場合は、主キーを使用します。

1

日付範囲の検索を実行しない場合は、主キーでインデックスと注文を追加しないでください。私はセマンティクスは、あなたが行が挿入された順序でリストされている点でまだ正しいと主張したいと思います。 PKはDateTimeではなくあなたのためにその注文を追跡しています。

これは、CreateDateTimeは、行が挿入されたときに常にgetdate()またはcomparableを使用していることを前提としています。あなたが他の方法で作成されていることが予想される場合、私はCreateDateTimeのインデックスに行き、Order By節でそれを使用します。

0

私は、datetime列にクラスタード・インデックスを持ついくつかのシナリオを持っていました。これは、データが常に増加している(ページ上のホットスポットを意味するが、ページが分割されていない)ため、ほとんどのクエリは日付範囲ではないため、他のデータではであるため、これは、エンティティではなく、大量のトランザクションデータに対するものでした。

特に、datetime列に基づいたテーブルに対して多くのクエリを実行する予定ですか?そうでなければ、私はあなたがインデックスから恩恵を受けるとは思わない - クラスタ化されたキーとして実際の識別子に固執する。最後に更新された列について言えば、そのようなインデックスを使用するクエリの割合はいくらですか?それはまったくあなたを得ることができるようには思われません(ただし、データが更新される頻度に応じて多くの費用がかかります)。

まさにどのようなエンティティについて話していますか?これらのユーザー、救急車、バービー人形、フォーラムの投稿、火山、何か他の人ですか? 1日、1週間、1か月に何行追加しますか?どのような種類のクエリを実行していますか?ボリュームの種類とクエリの種類がわかっていると、インデックス戦略を決定する上で大きな道のりがあります。

1

IDを使用してください。タイムゾーンの変更をより適切に考慮してください。

+0

詳細と解答を説明する必要があります。 – sabbahillel

関連する問題