2012-02-07 9 views
0

私は大きなテーブルを持っており、アプリケーション内のいくつかのイベントとアクションの正確な時刻を格納するDateTimeカラムを含んでいます。場合によっては、ユーザーはイベントの日付を入力できます。パフォーマンス向上のために日付の順序を処理する最も良い方法は?

イベントシーケンスを検証したり、発生時までにイベントを見つけたりしたいと考えています。

イベントをDateTimeで並べ替えると、大量のデータで時間がかかります。私がIDで注文した場合、ユーザーのデータ入力が順序付けられているという保証はなく、ユーザーはシーケンスを決定する責任を負いません(単に日付の時刻を入力する)。私は、DateTimeの代わりに数値フィールドで注文することを好みます。

あなたはどう思いますか?

答えて

1

datetimeは、固定された時刻(通常は1970年1月1日)以来、整数のティック数として格納されることに注意してください。 datetimesを比較するには、この単一の値を整数比較するだけです。年、月、日などを比較する必要はありません。datetimeではなく文字列として日付を格納している場合を除きます。

私の推測では、あなたのデータベースはIDでソートされたデータを内部的に格納しており、そのIDも索引付けされているので、それはとても速いのです。あなたの問題は、データ型でソートされていません。単純に非ID列でソートされています。 Reedが示唆しているように、おそらく列のインデックスを作成するだけです。あなたが何かを、どこかで、あなたがしてはならないやり方でやっている可能性もあります。

+0

これを取得しました!ありがとうServy。 –

2

大規模なデータであっても、データベースの列のインデックスが設定されていれば、DateTime列の順序は遅くなるべきではありません。

DateTime(dbのインデックスを使用)で直接注文しますが、LINQクエリによって結果が適切な日付ウィンドウに制限されていることを確認してください。

+0

インデックスされた日付時刻と14000000レコード以上のbigintの間に大きな違いはないのですか? –

+0

@Rezaいいえ - DBに格納されているDateTimeは実際には数値です。インデックスを作成すると、それは他の小切手へのクエリで同様の速度になるでしょう。 –

関連する問題