0

バックグラウンド

  • Microsoft SQL Server 2008 R2
  • 1 日あたり最大 10 万レコードのテーブル
  • このテーブルを照会するほとんどのクエリは、指定された列によってフィルター処理されます

問題

したがって、データベースのパフォーマンスを少し改善するには、日付列にインデックスを追加するオプションがありますが、日付をdate型として保存する代わりにinteger、次の形式を使用して として保存します。

ddMMyyyy
**Edit: Changed the format to yyyyMMdd after looking at comments**

質問

  1. これは良い考えだと思いますか?
  2. これを行うことで何か改善点はありますか?
  3. 考えられる欠点はありますか?

まだ設計段階にあるので、気が向いたら変更する時間はまだあります。

この列でフィルタを実行する多くのクエリがあると予想されますが、IMO ではパフォーマンスが向上しません。時刻を指定せずに Date 列を使用するのと同じです。

4

1 に答える 1

1

テーブルのパフォーマンスを向上させようとしている場合は、列を追加することから始めるのは疑わしい方法です。

まず、テーブルにすでに日付列がある場合は、それを使用します。日付は4バイトなので、整数と同じサイズです。さらに重要なのは、データベースに組み込まれているあらゆる種類の日付機能(月名の取得、日付による順序付け、日付間の日数の計算など)を提供することです。

インデックスの作成は、パフォーマンスを向上させるための1つのアプローチです。また、テーブルのパーティション化を検討することをお勧めします。おそらく、テーブルを日ごとに分割する必要はありませんが、月ごとに分割すると、適度なサイズのパーティション(約300万行)が生成されます。

実際、クエリがすべて最近のデータに対して行われている場合は、履歴テーブルを作成することをお勧めします。このテーブルは、いつでもクエリできます。次に、最新のデータを「現在の」テーブルに保持します。毎日実行するプロセスを使用して、現在のデータから最も古いデータを削除し、行を履歴テーブルに配置することができます。

いずれにせよ、コメントが示唆するように、フォーマットddMmyyyyは不合理なフォーマットです。それは平等のために機能しますが、betweenまたはのためには機能しませんorder by

于 2012-11-12T19:10:27.100 に答える