1

たとえば、開始日と終了日に基づいて結合する必要があるテーブルがいくつかあります...

SELECT    * 
FROM      [t1] 
JOIN      [t2] 
   ON [t2].[start] BETWEEN [t1].[start] AND [t1].[stop] 
   OR [t2].[stop]  BETWEEN [t1].[start] AND [t1].[stop]
   OR [t2].[start] < [t1].[start] and [t2].[stop] > [t1].[stop]

これらのテーブルは、数百万行になる可能性があります。

開始/停止をdatetime2および/またはbigint(エポックからのナノ秒)として保存するオプションがあります。このオプションを指定すると、インデックスが作成された場合、bigint を使用することでパフォーマンスが向上しますか?

どちらのアプローチにも長所/短所はありますか?

整数アプローチの方が速いと思います-

4

2 に答える 2

4

を使用しdatetime2ます。「人が読みやすい」に加えて、「人がプログラミングしやすい」 。日付を表すために日付型を使用しない場合、間隔の計算、他のテーブルへの結合、外部時間との比較などで問題が発生しますgetdate()

効率に関する限り、比較のために、サーバーはほぼ確実にすべての日付型を整数として扱います。通常秒を気にするかどうかに応じて、あなたに開かれている唯一の速度の利点は、smalldatetime4バイトであるため、でのクラスタリングです。高解像度部分を別の として保持することもできますreal

于 2013-01-10T05:33:51.567 に答える
1

タイプを使用する限り、datetime2おそらく違いはありません。両方のタイプのサイズが似ているためです(datetime2--6〜8バイト、bigint--8バイト)。

IO コストが唯一のボトルネックになると想定しているため、比較するレコード (読み取るレコード) の数と、インデックスがどのようにdatetime2型を格納するかによって異なります。

datetimeあなたのケースで両方のオプションをテストして比較し、人間が読みやすいことを念頭に置いて、より良い方を選択します。

于 2013-01-09T08:50:15.750 に答える