2

私は多くのテーブルに修正日フィールドを保存しています。ロジックに時間部分を使用する必要がある場合もあれば、日付部分だけが必要な場合もあります。次のシナリオのどれがより効率的/ベストプラクティスであるか疑問に思います。

  1. 2つの列(1つはDATE型と1つはDATETIME型)を格納します。どちらも同じインスタンスを時間で表しますが、DATE列には明らかに日付部分のみが格納されます。日付のみの比較を行う必要がある場合は、DATE列を使用し、DATETIME列を使用する時間を含む比較を行う必要がある場合。

  2. タイプDATETIMEの1つの列を格納し、CONVERT(DATE、Date_Amended_Col)を使用して、必要なときにいつでも日付部分を取得します。

毎回CONVERTを使用すると、かなりのオーバーヘッドが発生しますか?DATE部分の方がアクセス頻度が高いと思いますので、CONVERTを多用している気がします。

修正が行われたときに両方のフィールドを更新する必要があるという事実を除けば、2番目の方法の明らかな欠点は考えられません。必要に応じて、いつでもそのトリガーを使用できます。

それとももっと良い方法はありますか?計算列を使用することは、毎回CONVERTを使用することと同じでしょうか?

どんな考えでもいただければ幸いです。

どうもありがとう、

アル

4

1 に答える 1

0

PERSISTED計算列をお勧めします。以下のMicrosoftの定義を参照してください。

特に指定がない限り、計算列はテーブルに物理的に格納されていない仮想列です。それらの値は、クエリで参照されるたびに再計算されます。データベースエンジンは、CREATETABLEおよびALTERTABLEステートメントでPERSISTEDキーワードを使用して、計算列をテーブルに物理的に格納します。それらの値は、計算の一部である列が変更されると更新されます。計算列をPERSISTEDとしてマークすることにより、決定論的であるが正確ではない計算列に索引を作成できます。さらに、計算列がCLR関数を参照している場合、データベースエンジンは、関数が本当に決定論的であるかどうかを検証できません。この場合、インデックスを作成できるように、計算列はPERSISTEDである必要があります。

于 2012-09-21T11:48:44.110 に答える